поэтому я пытаюсь вызвать функцию c в файле c в arduino uno.
с помощью команды 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
, но это не сработало
#include "nrf.c"
- если вы точно не знаете, что делаете, и у вас нет для этого веской причины, это почти наверняка неправильно.
@Clifford Это не была «команда сборки для успешной сборки». Это команда компиляции для успешной компиляции.
@tofro - Даже если бы это было так, это не меняет проблемы: это бесполезная информация. Однако -o nrf
делает это компиляцией и ссылкой.
Нет. Параметр "-c" указывает gcc только на компиляцию. В этом случае «-o» только меняет имя выходного (объектного) файла на что-то вводящее в заблуждение. Предположение ОП о том, что сборка gcc прошла успешно, неверно.
@tofro, ок, пропустил это при узком обзоре моего телефона. Дело все еще остается в силе. Но редактирование показывает, что это в любом случае небольшая ошибка компоновщика, поэтому он все равно компилируется в Arduino.
@Clifford Да, это явно сбой связи. GCC вообще не пытался установить связь, поэтому сбоя здесь не было.
@tofro исходная ссылка на GitHub была на код, включающий main()
, так что это явно не тот код, о котором идет речь.
Теперь вы вообще опустили код nrf.c. Должен быть и сам код. Не код, похожий на код, о котором вы спрашиваете. Также в сообщениях об ошибках ничего не говорится об «отсутствующих функциях», как вы сказали.
Из сообщений об ошибках компоновщика и кода. Понятно, что вы как включили nrf.c, так и отдельно его скомпилировали и скомпоновали. Я думаю, что Arduino IDE автоматически делает это, просто добавляя исходный код в скетч.
Размещайте код непосредственно в вопросе, а не в сторонних ссылках. Опубликуйте сообщение об ошибке или заполните журнал сборки. Вы опубликовали только команду сборки для успешной сборки, которая не сообщает нам ничего полезного.