Пользовательские C++ библиотеки на Ардуино
Вот я хочу для Ардуино написать самодельную библиотеку, чтобы работать опять же с самодельными клавиатурами, на C++. Как правильно её импортировать? Расширение файлов должно быть .h или .cpp, или оба расширения? Что писать в каждый файл?
Ответы (1 шт):
Библиотеки для 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. Эти сервисы удобны тем, что позволяют поддерживать код от версии к версии, делая коммиты.