Ну да, один к одному ситуация. Я случайно выделил массив по-староверски, нажал кнопку скомпилировать (с твёрдым намерением выделить память через new как только оно вывалится по ошибке) а оно не вывалилось. Ну и началась развлекуха.
Я понял эту мысль (у меня список команд перед глазами которые шлёт эта железка, все до 10 байт, данные забираю из буфера вовремя. Плюс (если мне память не изменяет) размер буфера Serial 64 байта, так что пока не вижу повода для паники.
А вот эту мысль не понял - то что мы объявим переменную const не сделает её известной во время компияции…
Ну да, это тупиковая гипотеза.
Тогда жёстко задавать размерность, проверяя abailable() на допустимую длину или new/delete юзать. Третий вариант - побайтгый разбор на лету.
Не, вы мысль не уловили, я в 14 сообщении написал. То бишь оно неожиданно (для меня и авторов букварей, которые я читал до этого) заработало без выделения памяти через new (в ардуино IDE), камрад xDriver объяснил почему.
есть прекрасная альтернатива new - функция alloc(). Хапает на стеке памяти скока надо, которая потом автоматически освобождается при выходе из функции. И куча не трогается лишний раз. Боюсь, что твой локальный динамический массив унутре реализован именно так
Вот объясните мне, простому обывателю принцип работы динамической памяти на МК. Там нет независимых потоков, нет ОС за всем следящей. В процессе работы откуда программа знает где и сколько можно выделить? Вот не пойму никак. Одно дело когда компилятор всё просчитывает и заранее знает где и что в памяти.