Написание библиотеки общего ядра и танцы с бубном вокруг #define
- Войдите на сайт для отправки комментариев
Втр, 30/06/2015 - 13:53
Итак есть некий проект состоящий из нескольких устройств. на каждое устройство свой скетч но библиотека ядра общая. Ядро в зависимости от железки должно при помощи препроцессора то подключать какие-то модули то нет (для эконеомии размера скетча)
Если я в скетче задаю некий :
#define USE_LED true #define LED_SET 2 #include <My_core.h>
то как мне сделать так чтобы код внутри моего файла библиотеки My_cope.h (или My_core.cpp)
можно было написать
#ifdef USE_LED #include "My_core_led.h" #endif
И вообще суппер, если подскажете как сделать чтобы этот My_core_led.h видел дефайн LED_SET
То есть грубо говоря каксделать конфигурируемое из скетча ядро?
Простите, не понял проблемы. Вот так и пишите. Все должны всё увидеть. Или я чего-то не понял в вопросе?
У меня примерно так все и сделано, все работает замечательно.
Только скорее всего Вам надо писать не
а
А ядро - это что?
Насколько я понимаю вы можете задэфайнить хоть все 100500 дэфайнов.
Но если вы не используете ни одну функцию из них в вашей программе ничего не изменится.
А вот всякие #ifdef надо писать в тексте программы.
Или
Извиняюсь если не так объяснил.
Ядро это библиотека. котрая лежит в libraries/My_core
Я её планирую подключать в разных скетчах и дефайнами конфигурировать.
Вы не ответили на мой вопрос. Проблема-то в чём? Что не так? Вроде, нормально у Вас всё написано.
Проблема в том что файлы библиотеки не видят дефайны установленные в скетче
Этого не может быть. По логике у Вас всё правильно. Наверняка, проблема в какой-нибудь мелкой опечатке. Например, в Вашем первом посте в одном месте используется My_core.h, а в другом My_cope.h. Не удивлюсь, если и в коде имеется опечатка. Посмотрите. Или выложите реальные коды - я посмотрю.
Да, все должно работать. Или опечатка в названии дефайнов. У меня тоже так и сделано:
В скетче:
В файле arhat.h стоит:
Это позволяет убрав из скетча директиву #define _ARHAT_ 1 получить режим компиляции с определениями из стандартного файла,
или добавив иные значения в эту директиву дописать в будущем новые ветки режимов компиляции
или компилять код в режиме макс. экономии памяти.
Я ещё пользуюсь тем, что сам файл Arduino.h подшивается в скетч ПОСЛЕ всех директив препроцессора в самом скетче... соответственно строка
#define Arduino.h 1 -- автоматом выключает компиляцию "стандартных заголовков" из этого файла. :)