Хочется прояснить ситуацию с так называемым «языком программирования Arduino», который «основан на Wiring». Подобные сочетания слов часто встречаются на страничках, посвященных Arduino. На официальном сайте так и пишут: "...is programmed using the Arduino programming language (based on Wiring)". Фактически нет никакого особого языка программирования и программы пишутся на языке C/C++, а компилируются и собираются с помощью широко известного avr-gcc. Все особенности сводятся к тому, что имеется набор библиотек, включающий в себя некоторые функции (вроде 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" наверх и т.д..