Кто же он, этот таинственный язык програ

Arduino ( Freeduino )
Кто же он, этот таинственный язык программирования для Arduino?


Хочется прояснить ситуацию с так называемым «языком программирования 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" наверх, может еще какие-то мелочи, но принцип остаётся тем же.

giordanobruno.habrahabr.ru/blog/55254/

technik 05.12.2009 в 18.41 (обновлен 08.12.2009 в 18.02) комментарии 0 0

комментарии(0)

Комментировать

Для добавления комментария авторизируйтесь.
Последние комментарии:
© 2012 pobot.ru