Проблема с progmem
- Войдите на сайт для отправки комментариев
Я имею плату ArduinoMega2560
Недавно написал программу на 80кб, все работало. Для программы нужны были "сэмплы". (короткие звуковые кусочки PCM 8-bit 8kHz) Я добавил один, такого типа:
unsigned char sound[] PROGMEM = {....};
Размер программы увеличился на 8кб; все скомпилировалось и заработало. Но мне нужны были еще, аж 10 штук, что в сумме с общей программой влезало в пределы памяти контроллера.
И что же? После добавления только 3-х штук(как выше), программа скомпилировалась, но при перепрошивке все висло и в дальнейшем не работало. (мол 0xff != 0x80...) :(
Я убрал эти три штуки, не изменяя основную программу, - скетч прошился и заработал.
Вопрос: почему я не могу "забить" progmem-ами свои 255кб флеш-памяти контроллера? (что самое интересное: не важно какими данными я забиваю массивы progmem, если есть 1 большой, то других уже нельзя объявить)
PS: Что-то где-то слышал, что компилятор gcc(если не ошибаюсь) не может работать с "большими" массивами с флагом progmem.
null
null
Почитал про GCC (в winavr)... Оказалось, он не может объявлять progmem-ов > 64кбайт. (даже если массив разделить на несколько частей) Какая-то проблема с LMP, что-то там с определением указателей. Для контроллерах, у которых флеш > 64кб - используестся ELMP, чтобы адресация была выше границы 64кб; а WinAvr похоже не умеет с ней работать...