|
|||||||
Что такое язык программирования 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" наверх, может еще какие-то мелочи, но идея остается той же самой. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|