Пользовательские C++ библиотеки на Ардуино

Вот я хочу для Ардуино написать самодельную библиотеку, чтобы работать опять же с самодельными клавиатурами, на C++. Как правильно её импортировать? Расширение файлов должно быть .h или .cpp, или оба расширения? Что писать в каждый файл?


Ответы (1 шт):

Автор решения: Vanyamba Electronics

Библиотеки для Arduino IDE размещаются в папке libraries.

Чтобы установить библиотеку, достаточно поместить туда папку с файлами, с названием например MyLibrary. А чтобы использовать библиотеку, в скетче нужно добавить инклюд, например:

#include "mylib.h"

При компиляции Arduino IDE ищет эти инклюды с папке libraries и копирует файлы библиотеки во временную папку с проектом. То есть эти библиотки не линкуются, как библиотеки .lib, а компилируются как часть проекта. Поэтому можно использовать файлы .h и .cpp.

В коде библиотеки лучше не использовать объекты и классы, поскольку в коде они занимают в 2,5 раза больше места, чем такой же код, реализованный как функции языка C. Но если нужен C++, то научитесь писать код шаблонами - такой код компилируется очень компактно, сравнимо с ассемблерным кодом.

В качестве примера кода на шаблонах могу привести мою собственную библиотеку VeDuino. Это адаптация библиотеки С++ классов для микроконтроллеров VE_AVR. Она устроена так, чтобы типичный C++ код компилировался в код, аналогичный ассемблерному. Например:

DEV_GPIOB.setHigh( LED_PIN );
DEV_GPIOB.setLow( LED_PIN );

будет скомпилирован в 2 команды ассемблера

PORTB |= _BV( LED_BIT );
PORTB &= ~_BV( LED_BIT );

что гораздо компактнее кода

digitalWrite( LED_PIN, HIGH );
digitalWrite( LED_PIN, LOW );

в котором по-настоящему происходит вызов функции digitalWrite().

Для комфортной работы над проектом я создал файл проекта в IDE (это был Eclipse C++), а в папке libraries Arduino IDE создал символьные ссылки на файлы библиотеки.

Саму библиотеку я запаковал с помощью gzip и разместил на SourceForge. В принципе подойдёт и GitHub. Эти сервисы удобны тем, что позволяют поддерживать код от версии к версии, делая коммиты.

→ Ссылка