?

Log in

No account? Create an account

Previous Entry | Next Entry

Потерпел сегодня эпическое поражение в схватке с AVRами. Дело в том, что мы сейчас делаем экспериментальный прибор и я наткнулся на нехватку памяти. Ну, точнее, не то что бы нехватку, но если бы её было больше, можно было бы сохранять больше информации. В общем, решил я поменять ATmega644PA на ATmega1284P. Казалось бы, камни одного семейства, даташит у них общий, начинка одинаковая - всего-то надо снять один, поставить другой да пересобрать прошивку. Ага, как же...
Первое, на что я напоролся, это то, что любимый avr-gcc собранный crossdev`ом в генте наотрез отказывается линковать под m1284 - говорит, мол libgcc у тебя несовместимый. Долго бился, так ничего с этим сделать не смог и пошёл под винду. Под виндой у меня, надо отметить, как минимум два комплект компиляторов - один, скачанный с сайта атмела вручную и один, прилетевший с Atmel Studio 6 (наверняка есть ещё прилетевший с Studio 5, но не проверял). Оба собирают, с сильно разным качеством оптимизации, но не суть.
И тут я наткнулся на вторые грабли - компиляторы дружно не знают что такое регистр PRR (вторые потому что сначала компилил бутлоадер, где PRR не используется). Причём для 644-той меги, почему-то, знают. Натравил диф на заголовки, выяснил, что оно называется PRR0, задумался... Скачал свежий даташит - и правда, теперь регистров PRR два - PRR0 и PRR1, в котором находится один флаг - отключающий таймер 3. Вот мне теперь интересно, когда это там успел появиться второй 16-разрядный таймер? А то мне их вечно не хватает... Ну и не ясно, почему для 644 есть алиас PRR -> PRR0, а для 1284 - нет?
Но это фигня, фатальным оказался третий косяк: контроллер наглухо виснет где-то в функции strcpy_P (копирование строки из флеша в оперативку). Грешат этим оба виндовых компилятора, причину не нашёл...

Comments