Есть два разных проекта: основная программа и загрузчик для обновления программы по uart.
В xcl файле описал расположение кодов независимо друг от друга.
xcl-файл основной программы:
Код
-Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=1200-EFFF
-Z(CODE)ISR_CODE,CODE_ID=1200-EFFF
-Z(CODE)CSTART=2000-20FF
-P(CODE)CODE=1200-EFFF
-Z(CODE)INTVEC=FFE0-FFFF
-Z(CODE)RESET=FFFE-FFFF
-Z(CODE)ISR_CODE,CODE_ID=1200-EFFF
-Z(CODE)CSTART=2000-20FF
-P(CODE)CODE=1200-EFFF
-Z(CODE)INTVEC=FFE0-FFFF
-Z(CODE)RESET=FFFE-FFFF
xcl-файл загрузчика:
Код
-Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=F000-FDFF
-Z(CODE)ISR_CODE,CODE_ID=F000-FDFF
-Z(CODE)CSTART=F800-F8FF
-P(CODE)CODE=F000-FDFF
-Z(CODE)RESET=FFFE-FFFF
-Z(CODE)ISR_CODE,CODE_ID=F000-FDFF
-Z(CODE)CSTART=F800-F8FF
-P(CODE)CODE=F000-FDFF
-Z(CODE)RESET=FFFE-FFFF
В загрузчике прерывания не использую.
Выполняю следующие действия в загрузчике:
1. Очищаю все сектора флеш-памяти по адресам основной программы
и сектор векторов прерываний.
2. Постранично (по 256 слов) прописываю код основной программы во флеш-память.
3. Когда записываю адрес перехода при сбросе по адресу 0xFFFE-0xFFFF, контроллер зависает.
4. Помогает аппаратный сброс программатором.
5. После этого нормально работает загрузчик и основная программа.
Что я делаю не так, подскажите пожалуйста.