所以我试图在arduino uno中的c文件中调用c函数。
使用 gcc-avr 命令编译成功:
sudo avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o nrf nrf.c
但是在 arduino ide 上,它给了我错误:nrf.c 正在调用其他 c 文件中存在的函数。那么如何解决呢?
.ino 文件
#include "nrf.c"
extern "C" // these functions does not exist in c file they are in a .s file
{
void init_serial();
void print_msg();
void light();
}
//----------------------------------------------------
void setup()
{
}
void loop(){
nrf_start1();
light();
}
这是 arduino ide 的输出:
/tmp/arduino/sketches/8589FEB308F7EAA6CFEF4682C1500C77/sketch/sketch_jul11a.ino.cpp.o (symbol from plugin): In function `nrf_start1()':
(.text+0x0): multiple definition of `__vector_1'
/tmp/arduino/sketches/8589FEB308F7EAA6CFEF4682C1500C77/sketch/nrf.c.o (symbol from plugin):(.text+0x0): first defined here
/tmp/arduino/sketches/8589FEB308F7EAA6CFEF4682C1500C77/sketch/sketch_jul11a.ino.cpp.o (symbol from plugin): In function `nrf_start1()':
(.text+0x0): multiple definition of `message_received'
/tmp/arduino/sketches/8589FEB308F7EAA6CFEF4682C1500C77/sketch/nrf.c.o (symbol from plugin):(.text+0x0): first defined here
/tmp/arduino/sketches/8589FEB308F7EAA6CFEF4682C1500C77/sketch/sketch_jul11a.ino.cpp.o (symbol from plugin): In function `nrf_start1()':
(.text+0x0): multiple definition of `status'
我尝试使用
extern c
调用已编译的版本,但它不起作用
来自linker错误消息和代码。 很明显,您同时拥有 included nrf.c 并单独编译和链接它。 我认为 Arduino IDE 只需将源代码添加到草图中即可自动完成此操作。