отож, я себе из плащёвки в 1972 пошил, 1972 КАРЛ! Надо было запатентовать! Счас бы пятки грел на Сейшелах
Определи дефайны до объявления библиотеки.
Да, неужели? Поэт не зря сказал:
P.S. Кстати, название, которое у нас пишется как “Майорка” по-испански звучит как: “Махорка”.
Не поможет. Сам “.cpp”-шный файл библиотеки этого не увидит. Такое прокатит только если библиотека состоит целиком из включаемых по include
файлов.
Ну так-то да
и не прокатило )))
еще советуют опцию компилятора -D добавить но до этого я ещё не добрался
С Вашим лживым С всё понятно, “здесь играть, здесь не играть, здесь я рыбу заворачивал”
А вот нехрен было во что попало заворачивать!
Это не я, это IARDUINO неокрепшие девичьи души растлевает )))
Что делать с iarduino
я уже сказал выше. Не хотите последовать совету - сам себе буратино!
откройте .h файл библиотеки и добавьте нужное определение. Если будет работающее -сделаете более красиво
да не пользуюсь я ихними библиотеками, не пользуюсь, если какая надо ищу у адафруита, если нет такой иду на arduino.cc, смотрю что они рекомендуют
Это заметно
это не я, это одно юное создание )))
Что не нравится компилятору - понятно.
Но пока смотрел, очередной раз понял, что не разбираюсь в процессе сборки.
Озадачившая меня ситуация:
Компилируется пример digitalWrite из iarduino_I2C_Relay-1.1.3
В исходный файл iarduino_I2C_Relay_I2C.h добавлены два #warning , чтобы видеть, какой вариант компилируется.
(там варианты с использованием <Wire.h> и без использования <Wire.h>)
// Функция пакетного чтения нескольких байт данных из регистров модуля:
bool readBytes(uint8_t adr, uint8_t reg, uint8_t *data, uint8_t sum){
#if defined(iarduino_I2C_TW)
#warning readBytes iarduino_I2C_TW
// Если используется шина I2C под управлением библиотеки Wire:
uint8_t i=0;
Wire.beginTransmission(adr);
Wire.write(reg);
.
.
.
#else
// Если шина управляется функциями нижнего уровня данного класса:
#warning RedaBytes LOW_LEVEL_FUNCTIONS
uint8_t i=0;
if ( start () ) { i=1; // Если на шине I2C установилось состояние START, то ...
if ( sendID (adr,0) ) { i=2; // Если модуль ответил ACK на получение адреса устройства adr с битом RW=0 (запись), то ...
}}}}}} stop (); return i==5; // Отправляем команду STOP и возвращаем результат успешности чтения
.
.
.
#endif
}
При запуске компиляции в Arduino IDE 1.8.13
выполняются несколько этапов:
-----Компиляция скетча…
выводится #warning readBytes iarduino_I2C_TW
(ИМХО т.к. в скетче подключена <Wire.h>)
-----Compiling libraries…
выводится #warning ReadBytes LOW_LEVEL_FUNCTIONS
(ИМХО т.к. в библиотеке не подключена <Wire.h> для варианта UNO)
-----Compiling core…
-----Linking everything together…
В asm листинге видно, что в результате используется вариант
readBytes iarduino_I2C_TW
Тут мои мысли путаются, т.к. используется вариант от “Компиляция скетча…”, но ведь на этом этапе не происходит компиляция файла библиотеки cpp.
CPP компилируется на этапе “Compiling libraries…”, и в нем компилируется вариант ReadBytes LOW_LEVEL_FUNCTIONS?
Есть ли “простое” объяснение? (но не вида - “так надо”).
Не уверен, что разберусь, но посмотреть завтра попробую (сегодня не могу уже). Дайте пожалуйста ссылку на биб-ку, чтобы мне не искать и время не тратить.
https://github.com/tremaru/iarduino_I2C_Relay/archive/1.1.3.zip
Я думал, может есть какой-то общий принцип.
Если это частный случай, или я не понятно задал вопрос, то и ладно.
Дополнено позже: Просто если это частный случай, то получается, что я прошу пояснить особенность библиотеки “которую надо выкинуть на помойку”.
ну или “боль снимите, а опухоль оставьте” )))
класть дефинитион функции в .h файл, подключаемый в два юнита компиляции - плохая идея
Скачал библиотеку по Вашей ссылке, но такого примера там не нашёл. Там только три примера:
Чего компилировать-то?
digitalWrite
из папки Relay