Как работает Arduino IDE?
Знаете, простой скетч Arduino не имеет основной функции и не включает cmds предварительной обработки, поэтому я просто хочу знать, как IDE Arduino преобразует скетч в обычный исходный код C/C++ и как выглядит исходный код.
Если возможно, я также хочу использовать cmd, например g++ -E, чтобы просмотреть файл .i, созданный после предварительной обработки. Как это сделать?
ps: у меня плохой английский.
@user7028945, 👍4
Обсуждение2 ответа
Лучший ответ:
Вы можете включить подробную компиляцию.
Это покажет все команды компилятора, используемые Arduino IDE.
Файл ino преобразуется в файл .cpp (который вы можете увидеть в подробном выводе). В основном преобразование происходит следующим образом:
- объединить все файлы .ino в один большой файл .ino с [project].ino сначала файл
- Добавить arduino.h
- Добавить все объявления функций методов, определенных в файлах .ino
- Сохранить как файл .cpp
Что касается отсутствия основного метода. Ядро содержит файл main.cpp, который определяет main в мире avr, это выглядит так
int main(void)
{
init();
initVariant();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
да, я понял! Я публикую краткую статью об этом.[link](http://www.cnblogs.com/lulipro/p/6657890.html) thx :), @user7028945
Я не совсем уверен, что делает arduino-builder
, но это должно быть похоже на традиционный метод.
Учитывая «минимальный» набросок:
void setup() {
}
void loop() {
}
Сначала IDE объединяет все файлы .ino
и .pde
в один большой. Я полагаю, что порядок объединения следующий:
- Начнем с «главного» INO-файла (имя которого совпадает с именем папки, в которой он находится).
- Добавьте к этому каждый файл
.ino
или.pde
в алфавитном порядке.
Затем IDE добавит требуемый #include <Arduino.h>
и прототипы функций для всех найденных функций — так что в итоге это будет выглядеть так:
#include <Arduino.h>
void setup();
void loop();
void setup() {
}
void loop() {
}
Наконец, он запускает обычные команды gcc
и g++
для сгенерированных файлов. Сгенерированные файлы можно найти в папке build. Где именно, зависит от используемой операционной системы. Включите подробную компиляцию в настройках, и вы увидите выполняемые команды gcc
и g++
, а также пути к задействованным файлам, что позволяет вам увидеть, где хранятся предварительно обработанные файлы.
Другой важный шаг, который выполняет IDE, не изменяя сами файлы, — это поиск любых записей #include
, соответствующих библиотекам, и добавление -I <path>
к командам компиляции для этих библиотек. Затем он также находит любые исходные файлы, связанные с этими библиотеками, и компилирует их. Он также компилирует все исходные файлы core, в которых находятся функции main()
(см. ответ @jantje для получения подробной информации о том, как формируется функция main()
).
После того как IDE завершит синтаксический анализ и обработку, все будет стандартно для gcc
и g++
.
Ты меня победил ;-), @jantje
Ваш ответ полезен! спасибо! :), @user7028945
- Arduino Uno: avrdude: stk500_recv(): программатор не отвечает
- Запуск двух шаговых двигателей с двумя поворотными энкодерами
- Программирование пользовательских Arduino Mega с Arduino Uno
- Arduino 1.6.4 не показывает никаких /tty/ опций в последовательных портах
- Использование библиотеки Arduino fix_fft или arduinoFFT для фильтрации определенного звука?
- Как сгенерировать файлы .a и .so для добавления в проект arduino
- Автономный ATMega328 — нужно ли прожигать загрузчик?
- Проблемы со скоростью шагового двигателя Nema 17
https://www.youtube.com/watch?v=V-K9tzRqCqM Думаю это видео лучший ответ, @Salman Haroon