AVR C 代码编译成功,但在 arduino ide 中它给了我缺少函数的错误

问题描述 投票:0回答:1

所以我试图在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
调用已编译的版本,但它不起作用

c arduino avr arduino-ide
1个回答
0
投票

来自linker错误消息和代码。 很明显,您同时拥有 included nrf.c 并单独编译和链接它。 我认为 Arduino IDE 只需将源代码添加到草图中即可自动完成此操作。

© www.soinside.com 2019 - 2024. All rights reserved.