Увеличение занятой памяти при переносе массива внутрь setup()

нет, там везде температуры разные, все датчики перепроверял нагревом руки.
Возможно, что из-за переустановки системы у меня поехали папки - я устанавливал библиотеки разными способами. То есть скорее всего сейчас смотрю одно, а на деле работает из другой паки. Поздно уже - не полезу. Упрёк аккуратности принял, разберусь… спасибо

Посмотрел либу - мой коммент выше не актуален. Она берёт указатель, поэтому пофиг. Делайте, как в примере async_read_many_bus_pgm.ino и не переживайте за addr

Да, кто ж Вас знает? Вы ведь

Как перенесли? Где получившийся скетч? Там можно по-разному перенести.

Как попробовали? Где получившийся скетч? Там можно по-разному сделать.

Я вообще не понимаю, что коллеги обсуждают. Вернее, понимаю, каждый обсуждает не то, что Вы сделали, а то, как он сделал бы сам в предположении, что Вы сделали именно так.

Ваша проблема не стоит выеденного яйца – если Вы нормально опкажете что и как делаете, то всё решится одним нормальным ответом.

Раздал орехов …

Проблемы давно нет - ответил уже в 8 посте.
Дальше народ указал, что у меня вызов неправильный, а я удивился почему оно тогда вообще работает…

Писал пару лет назад, а вчера править начал и запутался - склероз… Сейчас посмотрел.
Что касается моего куцего вызова
MicroDS18B20<3, DS_ADDR_MODE> sensor[DS_SENSOR_AMOUNT];
вместо
MicroDS18B20<D3, DS_ADDR_MODE, DS_SENSOR_AMOUNT, DS_PROGMEM> sensor;
Вызов, который у меня - взят из примера асинхронного опроса датчиков на одной линии (async_read_many.ino из примеров библиотеки).
Правда, в этом примере PROGMEM нет - я вчера его сам поставил, поэтому наверное народ и запутался - дали мне вызов с 4мя параметрами из async_read_many_bus_pgm.ino - там уже вызовы другие + в самой функции сразу предусмотрен DS_PROGMEM
В целом пока проблем вроде нет, оставил как и было изначально - работает…
Всем спасибо!

это пять :slight_smile:
Заходите еще

принял, каюсь((

Не надо каяться, перепишите нормально.
Если не ошибаюсь, вы изначально хотели уменьшить расход памяти в коде?
У вас сейчас создается 18 экземпляров класса библиотеки вместо одного.

Да, 18 штук, как в примере гиверовской статьи было.
Как правильнее?

Правильно - один экземпляр, а в нем массив из 18 датчиков.
А у вас - массив из 18 экземпляров, в каждом один датчик.
Почувствуйте разницу

По-моему это в async_read_many_bus_pgm.ino было показано.
Да, так правильнее. Благодарю.

Имелось ввиду это:

void my_function() {
  int array[2048];    // Этот массив будет размещен на стеке функции и будет уничтожен при выходе из функции
  ..
  ..
}

Массив в примере выше объявлен не как const, поэтому он будет размещен в ОЗУ (на стеке). Если бы он был глобальным, то да, он съел бы память навсегда.

У вас же массив, хоть и находится внутри функции, но он не ведет себя так, как массив из примера выше. Почему? Ваш массив обхявлен как READ-ONLY (const) , поэтому компилятор оставил его во флешке. Если мы в массив не пишем, то не нужно ему лежать в ОЗУ. А если пишем - то он будет в ОЗУ, и тут уже можно играться с местоположением: стек или глобальная память.

Для AVR ?

Ай, AVR, PROGMEM.. не заметил :(.