Проблема с progmem

krikus
Offline
Зарегистрирован: 22.07.2011

Я имею плату ArduinoMega2560

Недавно написал программу на 80кб, все работало. Для программы нужны были "сэмплы". (короткие звуковые кусочки PCM 8-bit 8kHz) Я добавил один, такого типа:

unsigned char sound[] PROGMEM = {....};

Размер программы увеличился на 8кб; все скомпилировалось и заработало. Но мне нужны были еще, аж 10 штук, что в сумме с общей программой влезало в пределы памяти контроллера. 

И что же? После добавления только 3-х штук(как выше), программа скомпилировалась, но при перепрошивке все висло и в дальнейшем не работало. (мол 0xff != 0x80...) :(

Я убрал эти три штуки, не изменяя основную программу, - скетч прошился и заработал.

Вопрос: почему я не могу "забить" progmem-ами свои 255кб флеш-памяти контроллера? (что самое интересное: не важно какими данными я забиваю массивы progmem, если есть 1 большой, то других уже нельзя объявить)

PS: Что-то где-то слышал, что компилятор gcc(если не ошибаюсь) не может работать с "большими" массивами с флагом progmem.

krikus
Offline
Зарегистрирован: 22.07.2011

null

krikus
Offline
Зарегистрирован: 22.07.2011

null

krikus
Offline
Зарегистрирован: 22.07.2011

Почитал про GCC (в winavr)... Оказалось, он не может объявлять progmem-ов > 64кбайт. (даже если массив разделить на несколько частей) Какая-то проблема с LMP, что-то там с определением указателей. Для контроллерах, у которых флеш > 64кб - используестся ELMP, чтобы адресация была выше границы 64кб; а WinAvr похоже не умеет с ней работать...