Пропустить #define в сторонней библиотеке - PullRequest
0 голосов
/ 18 марта 2019

Я использую библиотеку Adafruit BME280 Library для своего проекта Arduino.
В ней есть строка:

#define BME280_ADDRESS (0x77)

Реальный адрес 0x76, но 0x77 определено во внутренней части библиотеки:

https://github.com/adafruit/Adafruit_BME280_Library/blob/master/Adafruit_BME280.h#L37

Как установить значение 0x76 без разветвления библиотеки или изменения ее кода?

PS Я использую lib_deps из PlatformIO для управления моимзависимости.

Обновление: Этот код (после #include блоков) не работает:

#undef BME280_ADDRESS
#define BME280_ADDRESS (0x76)

Ответы [ 3 ]

3 голосов
/ 19 марта 2019

Для этого можно использовать директивы препроцессора, как указано в другом ответе .

Другой вариант - просто скомпилировать это с вашим собственным кодом. Из репо эта библиотека представляет собой всего два файла, т.е. Adafruit_BME280.h / Adafruit_BME280.cpp. Вы можете просто изменить макрос и использовать его как есть. Он будет статически связан с вашим приложением, если вы сами не скомпилируете его как динамическую библиотеку.

Но вам не нужно делать ничего подобного, потому что существуют различные перегрузки функции Adafruit_BME280::begin(), которые вы можете использовать для предоставления своего собственного addr значения.

Adafruit_BME280.h файл (строки № 202-203 ):

    bool begin(uint8_t addr);
    bool begin(uint8_t addr, TwoWire *theWire);

Кроме того, проверьте примеры для дальнейшего понимания.

3 голосов
/ 18 марта 2019

возможно, вы можете использовать #undef BME280_ADDRESS для отмены макроса.

#undef влияет только на код, который находится ниже #undef. Так что, если вы используете его в разных файлах, вы должны добавить, чток каждому используемому вами файлу.

Если библиотека уже скомпилирована, единственный способ изменить макрос - это перекомпилировать его.

1 голос
/ 25 мая 2019

Вопрос был утерян, потому что кажется, что он похож на другой вопрос, но это не так: я не могу undef изменить переменную из стороннего объекта.

Решение состоит в том, чтобы изменить загруженную библиотеку с помощью regexpна этапе сборки с использованием динамических флагов сборки: !python extra_script.py

Это грязное решение, но оно автоматизировано и не требует каких-либо ручных действий.Только git clone и нажмите кнопку сборки в IDE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...