Что за язык программирования используется для Arduino?


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

Для примера, рассмотрим стандартный тестовый скетч (Sketch)

Sketch — это название программ для Arduino. Это единичный проект, который загружается и выполняется платой.

Например, скетч Blink — мигает светодиодом, подключённым к 13 выводу(File -> SketchBook -> Examples -> Digital -> Blink):
сам файл находится здесь: arduino-0016\examples\Digital\Blink\Blink.pde
Arduino IDE

/*
 * Blink
 *
 * The basic Arduino example.  Turns on an LED on for one second,
 * then off for one second, and so on...  We use pin 13 because,
 * depending on your Arduino board, it has either a built-in LED
 * or a built-in resistor so that you need only an LED.
 *
 * http://www.arduino.cc/en/Tutorial/Blink
 */

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, то во временной директории
вида
Local Settings\Temp\build40910.tmp\ появится куча файлов.
В основном это объектные, содержащие скомпилированные стандартные функции, а также готовая скомпилированная программа в разных форматах (ELF, ROM, HEX). Самым интересным является .cpp файл — это то, во что превратился наш код, с нашими подробными комментариями — разумеется они добавлены вручную 🙂
— Temporary_4477_534.cpp —

/*
 * Blink
 *
 * The basic Arduino example.  Turns on an LED on for one second,
 * then off for one second, and so on...  We use pin 13 because,
 * depending on your Arduino board, it has either a built-in LED
 * or a built-in resistor so that you need only an LED.
 *
 * http://www.arduino.cc/en/Tutorial/Blink
 */

#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» наверх, может еще какие-то мелочи, но идея остается той же самой.

Ссылки
http://wiring.org.co
по материалам Что за особый язык программирования используется для Arduino?

По теме
Ардуино что это и зачем?
Почему Arduino побеждает и почему он здесь, чтобы остаться?
Arduino, термины, начало работы
Разновидности плат Arduino, а также про клоны, оригиналы и совместимость
КМБ для начинающих ардуинщиков
Состав стартера (точка входа для начинающих ардуинщиков)
Подготовка к работе с Arduino/CraftDuino
Программирование Arduino — статьи.
Книги про Arduino
книга на русском языке: Блокнот программиста Arduino (PDF 1.3 Mb)
Шпаргалка по Arduino
Возможные ошибки при работе с Arduino

Arduino/CraftDuino и WinAVR — программируем на чистом С
Переходим от Arduino к программированию ATtiny13 на C


0 комментариев на «“Что за язык программирования используется для Arduino?”»

  1. Извените но чтотоне как не могу найти у себя на компьютере вот этот путь

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

    Мне нужен именно файл расширения .HEX для Протеуса, а найти не могу. Подробней можно рассказать пожалуйста. Спасибо заранее. 🙂

    • Где нашел? Мне тож hex нужны для протеуса))

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение