MyTetra Share
Делитесь знаниями!
Что такое язык программирования Wiring, использующийся в Arduino
Время создания: 10.02.2011 01:35
Текстовые метки: arduino
Раздел: Компьютер - Аппаратное обеспечение - Arduino / Atmega8 - Программирование Arduino / Atmega8
Запись: xintrea/mytetra_syncro/master/base/0000003417/text.html на raw.github.com

На официальном сайте пишут: "...is programmed using the Arduino programming language (based on Wiring)". Фактически, нет никакого особого языка программирования и программы пишутся на C/C++, а компилируются и собираются с помощью широко известного avr-gcc (в версии для Windows — WinAVR).

Все особенности сводятся к тому, что имеется набор библиотек, включающий в себя некоторые функции (вроде pinMode) и объекты (вроде Serial), а при компиляции программы среда разработки создает временный .cpp файл, в который кроме исходного кода включается еще несколько строчек, и полученный результат скармливается компилятору а затем линковщику с нужными параметрами.

Для примера, рассмотрим стандартный тестовый скетч, например, скетч Blink — мигает светодиодом, подключённым к 13 выводу(File -> SketchBook -> Examples -> Digital -> Blink):

Cам файл скетча находится здесь: arduino-XXXX\examples\Digital\Blink\Blink.pde.

Скетч имеет следующий код:

int ledPin = 13; // LED connected to digital pin 13

void setup() // run once, when the sketch starts

{

pinMode(ledPin, OUTPUT); // sets the digital pin as output

}

void loop() // run over and over again

{

digitalWrite(ledPin, HIGH); // sets the LED on

delay(1000); // waits for a second

digitalWrite(ledPin, LOW); // sets the LED off

delay(1000); // waits for a second

}

Если теперь скомпилировать полученную программу в Arduino IDE, то во временной директории

вида Local Settings\Temp\build40910.tmp\ появится куча файлов.

В основном это объектные, содержащие скомпилированные стандартные функции, а также готовая скомпилированная программа в разных форматах (ELF, ROM, HEX). Самым интересным является .cpp файл — это то, во что превратился наш код, с нашими подробными комментариями — разумеется они добавлены вручную :)

Когда писалась статья, был сгенерирован файл Temporary_4477_534.cpp следующего содержания:

#include "WProgram.h" // тут определения всех Arduino ф-ий, констант

void setup(); // объявляют ф-ии setup() и loop(), в которых наша

void loop(); // программа для Arduino и пишется

// --- а вот с этого места пошел наш исходник ---

int ledPin = 13; // светодиод подключается к выводу 13

void setup() // вызывается один раз при запуске скетча

{

pinMode(ledPin, OUTPUT); // устанавливаем вывод, как ВЫХОД

}

void loop() // вызывается в цикле

{

digitalWrite(ledPin, HIGH); // устанавливает высокий уровень напряжения

delay(1000); // задержка на 1 секунду

digitalWrite(ledPin, LOW); // устанавливает низкий уровень напряжения

delay(1000); // задержка на 1 секунду

} // здесь наш код кончился, опять пошли "довески"

int main(void) // здесь как и принято в c/c++ ф-ия main()

{

init(); // в ней вызывается своя инициализация

setup(); // затем вызывается наш setup()

for (;;) // и в бесконечном цикле вызывается наш loop()

loop();

return 0; // а сюда вообще никогда не попадаем

}

На самом деле, среда Arduino делает еще какие-то мелкие преобразования исходного кода, например декорирует не-латинские символы, выносит все "#include" наверх, может еще какие-то мелочи, но идея остается той же самой.

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования