Написание библиотеки есть у кого опыт?

axill
Offline
Зарегистрирован: 05.09.2011

Пишу универсальную библиотеку с шаблонами с++, atmel studio, stm8 iar, stm32 keil

Нужно чтобы библиотека работала и с ардуино причем как с ардуинками так и с esp

Есть у кого опыт? Даже не написанияс нуля, а настройки готовой библиотеки на работу с arduino ide?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

И Вы туда же?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

А что именно интересует? Директивы условной компиляции под разные камни? Если да, то:

  #if defined(__AVR_ATmega168__)
    // Arduino Diecimila and older
    Serial.println("__AVR_ATmega168__");
  #endif
  
  #if defined(__AVR_ATmega328P__)
    // Arduino Duemilanove and Uno
    Serial.println("__AVR_ATmega328P__");
  #endif
  
  #if defined(__AVR_ATmega2560__)
    // Arduino Mega 2560
    Serial.println("__AVR_ATmega2560__");
  #endif
  
  #if defined(__AVR_ATmega1280__)
    // Arduino Mega
    Serial.println("__AVR_ATmega1280__");
  #endif
  
  #if defined(__AVR_ATmega32U4__)
    // Arduino Leonardo
    Serial.println("__AVR_ATmega32U4__");
  #endif
  
  #if defined(__SAM3X8E__)
    // Arduino Due
    Serial.println("__SAM3X8E__");
  #endif
  
  // Determine board type
  #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
    Serial.println("Regular Arduino");
  #elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)
    Serial.println("Arduino Mega"); 
  #elif defined(__AVR_ATmega32U4__)
    Serial.println("Arduino Leonardo");
  #elif defined(__SAM3X8E__)
    Serial.println("Arduino Due");
  #else
    Serial.println("Unknown");
  #endif

Под ESP стоит попробовать:

#if defined(ESP8266)

Ещё - в boards.txt есть дефайны под каждую из установленных плат - можно их тоже юзать.

axill
Offline
Зарегистрирован: 05.09.2011

дефайны я так понимаю работают теже, что есть в atmel studio так как toolchain один

интересует как должны быть расположены файлы библиотек, чтобы все это было правильно доступно из скетчей

понятно, что в libraries, но как внутри? при этом хотелось бы сохранить универсальную структуру папок и файлов которая бы работала и для ардуино и для других компиляторов

сейчас у меня две библиотеки, под каждую своя папка и внутри наборы рахных .h и .cpp файлов, десятки классов и шаблонов

axill
Offline
Зарегистрирован: 05.09.2011

ЕвгенийП пишет:

И Вы туда же?

вопрос не раскрыт)) не знаю что ответить

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

axill пишет:

дефайны я так понимаю работают теже, что есть в atmel studio так как toolchain один

интересует как должны быть расположены файлы библиотек, чтобы все это было правильно доступно из скетчей

понятно, что в libraries, но как внутри? при этом хотелось бы сохранить универсальную структуру папок и файлов которая бы работала и для ардуино и для других компиляторов

сейчас у меня две библиотеки, под каждую своя папка и внутри наборы рахных .h и .cpp файлов, десятки классов и шаблонов

Для Arduino IDE достаточно сделать архив, где есть корневая папка с названием библиотеки, внутри неё - могуть прям сразу лежать исходники, могут - внутри папки src, рядом с папкой src может быть папка examples, внутри которой в разных папках - скетчи с примерами. В корневой папке также может присутствовать файл keywords.txt, который описывает ключевые слова, которые надо подсвечивать редактором.

Для остальных сред разработки - можно применить такой же формат, имхо, т.к. в глобальных настройках среды всегда можно указать ещё один include path ;)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

DIYMan пишет:

в глобальных настройках среды всегда можно указать ещё один include path ;)

Подскажите где именно? 

axill
Offline
Зарегистрирован: 05.09.2011

DetSimen пишет:

Подскажите где именно? 

речь видимо про другие среды, в Atmel/IAR/Keil это указывается в настройках проекта

axill
Offline
Зарегистрирован: 05.09.2011

DIYMan спасибо за разъяснения. какая то связь между названием библиотеки (корневой папки библиотеки) должна быть с названиями файлов исходников или это не важно?

думаю можно было бы линковать исходники для других сред в папку src выделенной папки библиотеки в ардуине тогда наверно это было бы оптимально

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

В упор нинашол на VS + VMicro

axill
Offline
Зарегистрирован: 05.09.2011

Vmicro надстройка над arduino ide, в ардуино ide нет возможности указать отдельные пути под скетч

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:

В упор нинашол на VS + VMicro

VS - Visual Studio?

Ну, наведите мыша на проект (не солюшн, а именно проект), вызовите его свойства, там 

вот для #include

а вот для заранее скомпилированных библиотек

axill
Offline
Зарегистрирован: 05.09.2011

Не смотрел последние версии vmicro, в старых VS использовался лишь как среда редактирования, если так и осталось то настройки самой studio ни на что не повлияют

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

У меня там только стандартные VS каталоги. К ардулибам там путей нет. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так там можно свои добавлять! Добавьте - будет.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Спасибо.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

axill пишет:

DIYMan спасибо за разъяснения. какая то связь между названием библиотеки (корневой папки библиотеки) должна быть с названиями файлов исходников или это не важно?

Для Arduino IDE - не знаю, важно или нет, но все библиотеки, что у меня стоят, имеют названия файлов *.cpp и *.h ровно такое, как название папки, куда эта библиотека закорячена, например, библиотека UTFT лежит в папке UTFT, внутри файлы UTFT.cpp и UTFT.h.

Библиотека U8GLib лежит в одноимённой папке, внутри папка src, внутри папки src файлы U8GLib.cpp и U8GLib.h.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

DIYMan пишет:

Для Arduino IDE - не знаю, важно или нет, но все библиотеки, что у меня стоят, имеют названия файлов *.cpp и *.h ровно такое, как название папки, куда эта библиотека закорячена, например, библиотека UTFT лежит в папке UTFT, внутри файлы UTFT.cpp и UTFT.h.

Библиотека U8GLib лежит в одноимённой папке, внутри папка src, внутри папки src файлы U8GLib.cpp и U8GLib.h.

для дуино иде не важны имена папок и типы файлов - важно только, что бы барахло валялось папках в любой из папок libraries дистрибутива или в папке *\Мои документы\Arduino\libraries\ и не конфликтовало по именам.

*узнаваемые имена папок - чисто для удобства ползателя.