Библиотека от IARDUINO, что не нравится компилятору?

отож, я себе из плащёвки в 1972 пошил, 1972 КАРЛ! Надо было запатентовать! Счас бы пятки грел на Сейшелах

Определи дефайны до объявления библиотеки.

Да, неужели? Поэт не зря сказал:

P.S. Кстати, название, которое у нас пишется как “Майорка” по-испански звучит как: “Махорка”.

Не поможет. Сам “.cpp”-шный файл библиотеки этого не увидит. Такое прокатит только если библиотека состоит целиком из включаемых по include файлов.

Ну так-то да

и не прокатило )))

еще советуют опцию компилятора -D добавить но до этого я ещё не добрался
С Вашим лживым С всё понятно, “здесь играть, здесь не играть, здесь я рыбу заворачивал”

А вот нехрен было во что попало заворачивать!

Это не я, это IARDUINO неокрепшие девичьи души растлевает )))

Что делать с iarduino я уже сказал выше. Не хотите последовать совету - сам себе буратино!

откройте .h файл библиотеки и добавьте нужное определение. Если будет работающее -сделаете более красиво

да не пользуюсь я ихними библиотеками, не пользуюсь, если какая надо ищу у адафруита, если нет такой иду на arduino.cc, смотрю что они рекомендуют

Это заметно :slight_smile:

это не я, это одно юное создание )))

Что не нравится компилятору - понятно.
Но пока смотрел, очередной раз понял, что не разбираюсь в процессе сборки.

Озадачившая меня ситуация:
Компилируется пример 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