Как работает Arduino IDE?

Знаете, простой скетч Arduino не имеет основной функции и не включает cmds предварительной обработки, поэтому я просто хочу знать, как IDE Arduino преобразует скетч в обычный исходный код C/C++ и как выглядит исходный код.

Если возможно, я также хочу использовать cmd, например g++ -E, чтобы просмотреть файл .i, созданный после предварительной обработки. Как это сделать?

ps: у меня плохой английский.

, 👍4

Обсуждение

https://www.youtube.com/watch?v=V-K9tzRqCqM Думаю это видео лучший ответ, @Salman Haroon


2 ответа


Лучший ответ:

6

Вы можете включить подробную компиляцию.
Это покажет все команды компилятора, используемые Arduino IDE.

Файл ino преобразуется в файл .cpp (который вы можете увидеть в подробном выводе). В основном преобразование происходит следующим образом:

  1. объединить все файлы .ino в один большой файл .ino с [project].ino сначала файл
  2. Добавить arduino.h
  3. Добавить все объявления функций методов, определенных в файлах .ino
  4. Сохранить как файл .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


5

Я не совсем уверен, что делает arduino-builder, но это должно быть похоже на традиционный метод.

Учитывая «минимальный» набросок:

void setup() {
}

void loop() {
}

Сначала IDE объединяет все файлы .ino и .pde в один большой. Я полагаю, что порядок объединения следующий:

  1. Начнем с «главного» INO-файла (имя которого совпадает с именем папки, в которой он находится).
  2. Добавьте к этому каждый файл .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