проблемы со ссылками на неопределенную справочную справку!очень застрял - PullRequest
0 голосов
/ 12 мая 2018

Я получаю "неопределенную ссылку на 'i2c_master_init'", я думаю, что это связано с некоторыми ссылками, но не уверен, как исправить?

ОБНОВЛЕНИЕ:

Я некоторое время пытался найти ответ на этот вопрос. и заметил немного, но просто не уверен, что я делаю неправильно! извините, это должно быть трудно читать сейчас!

Это из i2c_master.h и не доставляет мне проблем

   static inline void i2c_master_enable(const struct i2c_master_module *const module){

   /* Sanity check of arguments */
    Assert(module);
   Assert(module->hw);

   SercomI2cm *const i2c_module = &(module->hw->I2CM);

   /* Timeout counter used to force bus state */
    uint32_t timeout_counter = 0;

    /* Wait for module to sync */
    _i2c_master_wait_for_sync(module);

    /* Enable module */
    i2c_module->CTRLA.reg |= SERCOM_I2CM_CTRLA_ENABLE;

    #if I2C_MASTER_CALLBACK_MODE == true
   /* Enable module interrupts */
   system_interrupt_enable(_sercom_get_interrupt_vector(module->hw));
   #endif

  /* Start timeout if bus state is unknown */

  while (!(i2c_module->STATUS.reg & SERCOM_I2CM_STATUS_BUSSTATE(1))) {
 timeout_counter++;
 if(timeout_counter >= (module->unknown_bus_state_timeout)) {

 /* Timeout, force bus state to idle */
 i2c_module->STATUS.reg = SERCOM_I2CM_STATUS_BUSSTATE(1);
 /* Workaround #1 */
  return;
  }

Это в том же файле и дает мне проблемы

 enum status_code i2c_master_init(struct i2c_master_module *const module, 
 Sercom *const hw, const struct i2c_master_config *const config);

это мой код .....

 #include <asf.h>

void initialize(void)
{
system_init();
delay_init();
ioport_init();
}
//I2c slave address
#define AM2315_ADDRESS 0xB8 //temp and humity sensor
#define DATA_LENGTH 10
#define TIMEOUT 1000 //number of time to try and send the packet before it 
fails

static uint8_t write_buffer[DATA_LENGTH] = {0x00, 0x01, 0x02, 0x03, 0x04, 
 0x05, 0x06, 0x07, 0x08, 0x09};

 static uint8_t read_buffer[DATA_LENGTH];
 struct i2c_master_module i2c_master_instance;

  void configure_i2c_master(void)
  {
  /* Initialize config structure and software module. */
  struct i2c_master_config config_i2c_master;
  i2c_master_get_config_defaults(&config_i2c_master);

  /* Change buffer timeout to something longer. */
 config_i2c_master.buffer_timeout = 10000;

 /* Initialize and enable device with config. */
 i2c_master_init(&i2c_master_instance, SERCOM1,  &config_i2c_master);
 i2c_master_enable(&i2c_master_instance);
 }

 int main (void)
 {
 initialize();
 configure_i2c_master();
 uint8_t timeout = 0 ;

 struct i2c_master_packet packet ={
 .address = AM2315_ADDRESS,
 .data_length = DATA_LENGTH,
 .data = write_buffer,
 .ten_bit_address = false,
 .hs_master_code = 0x0,
  };

 ioport_set_pin_dir(PIN_PA27, IOPORT_DIR_OUTPUT);

 while(1)
 {
 delay_ms(1000);
 ioport_set_pin_level(PIN_PA27, true);
 delay_ms(1000);
 ioport_set_pin_level(PIN_PA27, false);

 //write buffer to slave untill success
 while(i2c_master_read_packet_wait(&i2c_master_instance, &packet) != 
 STATUS_OK){
 if (timeout++ ==TIMEOUT){
  break;
 }

 } 
 //Read from slave until success.
packet.data = read_buffer;
 while (i2c_master_read_packet_wait(&i2c_master_instance, &packet) != 
 STATUS_OK){
 if (timeout++ ==TIMEOUT){
  break;
}
}
}
}

это мой вывод ...

------ Build started: Project: GccBoardProject1, Configuration: Debug ARM --

 Build started.

 Project "GccBoardProject1.cproj" (default targets):

  Target "PreBuildEvent" skipped, due to false condition; 
  ('$(PreBuildEvent)'!='') was evaluated as (''!='').

 Target "CoreBuild" in file "C:\Program Files 
  (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" from project 
 "C:\Users\benvo\Documents\Atmel 
 Studio\7.0\GccBoardProject1\GccBoardProject1\GccBoardProject1.cproj" 
 (target "Build" depends on it):

  Task "RunCompilerTask"

 Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils

 C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils\make.exe all --jobs 4 -- 
 output-sync 

 C:\Users\benvo\Documents\Atmel 
 Studio\7.0\GccBoardProject1\GccBoardProject1\src\main.c(35,6): warning: no 
 previous prototype for 'initialize' [-Wmissing-prototypes]

 void initialize(void)

      ^~~~~~~~~~

C:\Users\benvo\Documents\Atmel 
Studio\7.0\GccBoardProject1\GccBoardProject1\src\main.c(58,6): warning: no 
previous prototype for 'configure_i2c_master' [-Wmissing-prototypes]

void configure_i2c_master(void)

      ^~~~~~~~~~~~~~~~~~~~

Building file: ../src/main.c

Invoking: ARM/GNU C Compiler : 6.3.1

 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu- 
 toolchain\bin\arm-none-eabi-gcc.exe"  -x c -mthumb -D__SAMD21G18A__ -DDEBUG 
-DBOARD=USER_BOARD -DARM_MATH_CM0PLUS=true -DSYSTICK_MODE - 
 DI2C_MASTER_CALLBACK_MODE=true  -I"../src/ASF/common/boards" - 
I"../src/ASF/sam0/utils" -I"../src/ASF/sam0/utils/header_files" - 
I"../src/ASF/sam0/utils/preprocessor" - 
I"../src/ASF/thirdparty/CMSIS/Include" - 
I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/common/utils" - 
I"../src/ASF/sam0/utils/cmsis/samd21/include" - 
I"../src/ASF/sam0/utils/cmsis/samd21/source" - 
I"../src/ASF/sam0/drivers/system" 
-I"../src/ASF/sam0/drivers/system/clock/clock_samd21_r21_da_ha1" - 
I"../src/ASF/sam0/drivers/system/clock" - 
I"../src/ASF/sam0/drivers/system/interrupt" - 
I"../src/ASF/sam0/drivers/system/interrupt/system_interrupt_samd21" - 
I"../src/ASF/sam0/drivers/system/pinmux" - 
I"../src/ASF/sam0/drivers/system/power" - 
I"../src/ASF/sam0/drivers/system/power/power_sam_d_r_h" - 
I"../src/ASF/sam0/drivers/system/reset" - 
I"../src/ASF/sam0/drivers/system/reset/reset_sam_d_r_h" - 
I"../src/ASF/common2/boards/user_board" -I"../src" -I"../src/config" - 
I"../src/ASF/common2/services/delay" - 
I"../src/ASF/common2/services/delay/sam0" - 
I"../src/ASF/common/services/ioport" -I"../src/ASF/sam0/drivers/sercom" - 
I"../src/ASF/sam0/drivers/sercom/i2c"  -O1 -fdata-sections -ffunction- 
sections -mlong-calls -g3 -Wall -mcpu=cortex-m0plus -c -pipe -fno-strict- 
aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit- 
function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata- 
sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain - 
Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused - 
Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad- 
function-cast -Wwrite-strings -Wsign-compare -Waggregate-return  -Wmissing- 
declarations -Wformat -Wmissing-format-attribute -Wno-deprecated- 
declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long - 
Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -MD -MP - 
MF "src/main.d" -MT"src/main.d" -MT"src/main.o"   -o "src/main.o" 
"../src/main.c" 

Finished building: ../src/main.c

src/main.o: In function `configure_i2c_master':

C:\Users\benvo\Documents\Atmel 
Studio\7.0\GccBoardProject1\GccBoardProject1\src\main.c(69,1): error: 
undefined reference to `i2c_master_init'

src/main.o: In function `main':

C:\Users\benvo\Documents\Atmel 
Studio\7.0\GccBoardProject1\GccBoardProject1\src\main.c(103,1): error: 
undefined reference to `i2c_master_read_packet_wait'

collect2.exe(0,0): error: ld returned 1 exit status

make: *** [GccBoardProject1.elf] Error 1

Building target: GccBoardProject1.elf

Invoking: ARM/GNU Linker : 6.3.1

"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu- 
toolchain\bin\arm-none-eabi-gcc.exe" -o GccBoardProject1.elf  
src/ASF/sam0/drivers/sercom/sercom.o 
src/ASF/sam0/drivers/sercom/sercom_interrupt.o 
src/ASF/common2/services/delay/sam0/systick_counter.o 
src/ASF/common2/boards/user_board/init.o 
src/ASF/common/utils/interrupt/interrupt_sam_nvic.o 
src/ASF/sam0/drivers/system/clock/clock_samd21_r21_da_ha1/clock.o 
src/ASF/sam0/drivers/system/clock/clock_samd21_r21_da_ha1/gclk.o 
src/ASF/sam0/drivers/system/interrupt/system_interrupt.o 
src/ASF/sam0/drivers/system/pinmux/pinmux.o 
src/ASF/sam0/drivers/system/system.o 
src/ASF/sam0/utils/cmsis/samd21/source/gcc/startup_samd21.o 
src/ASF/sam0/utils/cmsis/samd21/source/system_samd21.o 
src/ASF/sam0/utils/syscalls/gcc/syscalls.o src/main.o   -mthumb -Wl,- 
Map="GccBoardProject1.map" --specs=nano.specs -Wl,--start-group - 
larm_cortexM0l_math -lm  -Wl,--end-group - 
L"../src/ASF/thirdparty/CMSIS/Lib/GCC"  -Wl,--gc-sections -mcpu=cortex- 
m0plus -Wl,--entry=Reset_Handler -Wl,--cref -mthumb - 
T../src/ASF/sam0/utils/linker_scripts/samd21/gcc/samd21g18a_flash.ld  

C:\Users\benvo\Documents\Atmel 
Studio\7.0\GccBoardProject1\GccBoardProject1\Debug\Makefile(333,1): error: 
recipe for target 'GccBoardProject1.elf' failed

The command exited with code 2.

Done executing task "RunCompilerTask" -- FAILED.

Done building target "CoreBuild" in project "GccBoardProject1.cproj" -- 
FAILED.

Done building project "GccBoardProject1.cproj" -- FAILED.



Build FAILED.

 ========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========

TAGS:
Tools, Atmel Software Framework (ASF) and Atmel Start (ASFv4), all 
architectures
...