Хочется прояснить ситуацию с так называемым «языком программирования Arduino», который «основан на Wiring». Подобные сочетания слов часто встречаются на страничках, посвященных Arduino. На официальном сайте так и пишут: "...is programmed using the Arduino programming language (based on Wiring)". По факту нет никакого особого языка программирования, и фактически программы пишутся на C/C++, а компилируются и собираются с помощью широко известного avr-gcc.
Все особенности сводятся к тому, что имеется набор библиотек, включающий в себя некоторые функции (вроде pinMode) и объекты (вроде Serial), а при компиляции Вашей программы среда разработки создает временный .cpp файл, в который кроме Вашего кода включается еще несколько строчек, и полученный результат скармливается компилятору а затем линковщику с нужными параметрами.
Для примера можно создать маленький проект с любым именем, добавить туда минимум кода, например так:
Если теперь «зашить» полученную программу в Arduino, то в папке с проектом появится папка «applet», а в ней куча файлов. В основном это объектники, содержащие скомпилированные стандартные функции, а также готовая скомпилированная программа в разных форматах (ELF, ROM, HEX). Самым интересным является .cpp файл — это то, во что превратился наш код:
На самом деле среда Arduino делает еще какие-то мелкие преобразования исходного кода, например декорирует не латинские символы, выносит все "#include" наверх, может еще какие-то мелочи, но идея остается той же самой.
Все особенности сводятся к тому, что имеется набор библиотек, включающий в себя некоторые функции (вроде pinMode) и объекты (вроде Serial), а при компиляции Вашей программы среда разработки создает временный .cpp файл, в который кроме Вашего кода включается еще несколько строчек, и полученный результат скармливается компилятору а затем линковщику с нужными параметрами.
Для примера можно создать маленький проект с любым именем, добавить туда минимум кода, например так:
--- Test.pde --- void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(500); } ---
Если теперь «зашить» полученную программу в Arduino, то в папке с проектом появится папка «applet», а в ней куча файлов. В основном это объектники, содержащие скомпилированные стандартные функции, а также готовая скомпилированная программа в разных форматах (ELF, ROM, HEX). Самым интересным является .cpp файл — это то, во что превратился наш код:
--- Test.cpp --- #include "WProgram.h" // тут определения всех Arduino ф-ий, констант и т.д. void setup(); // объявляют ф-ии setup() и loop(), в которых наша void loop(); // программа для Arduino и пишется void setup() { // --- а вот с этого места пошел наш исходник --- pinMode(13, OUTPUT); } void loop() { digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(500); } // здесь наш код кончился, опять пошли "довески" int main(void) // здесь как и принято в c/c++ ф-ия main() { init(); // в ней вызывается своя инициализация setup(); // затем вызывается наш setup() for (;;) // и в бесконечном цикле вызывается наш loop() loop(); return 0; // а сюда вообще никогда не попадаем } ---
На самом деле среда Arduino делает еще какие-то мелкие преобразования исходного кода, например декорирует не латинские символы, выносит все "#include" наверх, может еще какие-то мелочи, но идея остается той же самой.