Купил свои первые xmega64 для опытной партии изделий.
Написал прогу. Всё работает, всё гут.
Решил купить иксмеги для серии.
И оказалось что проще купить ATxmega128 чем ATxmega64.
Менеджер по продажам с пеной у рта кричал что чипы отличаются только обьёмами памяти и замена произойдёт абсолютно безболезненно.
Поверил. Купил.
Собрал изделие на 128-й.
НЕРАБОТАЕТ.
Начал рыть, пол дня блин убил.
Выяснил что неработает вот такой простейший код:
Код
ldi ra,low(MMM)
push ra
ldi ra,high(MMM)
push ra
ret
...
MMM: nop
Оказалось что у иксмеги128 програмной памяти больше чем 128кБ (у неё 136!) и у неё PC 22 бита!
Команды CALL,RCALL и вход в прерывание загружает в стек не 2 а 3 байта.
Пришлось переписывать программу и пересчитывать времянки.
Вот такая вот "безболезненная" замена.
Кстати, а где в DS на иксмеги указывается размер PC?