реклама на сайте
подробности

 
 
> Вектор прерывания RESET, Зависание контроллера при смене адреса перехода
-=MISHA=-
сообщение Nov 14 2012, 14:50
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 5-07-06
Пользователь №: 18 607



Здравствуйте! Пишу код для MSP430F449.

Есть два разных проекта: основная программа и загрузчик для обновления программы по 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


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


В загрузчике прерывания не использую.

Выполняю следующие действия в загрузчике:
1. Очищаю все сектора флеш-памяти по адресам основной программы
и сектор векторов прерываний.
2. Постранично (по 256 слов) прописываю код основной программы во флеш-память.
3. Когда записываю адрес перехода при сбросе по адресу 0xFFFE-0xFFFF, контроллер зависает.
4. Помогает аппаратный сброс программатором.
5. После этого нормально работает загрузчик и основная программа.

Что я делаю не так, подскажите пожалуйста.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Nov 14 2012, 15:34
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(-=MISHA=- @ Nov 14 2012, 19:50) *
Что я делаю не так, подскажите пожалуйста.
У вас ошибка в алгоритме/идеологии программы. Вектор RESET не может использоваться обеими программами. RESET должен использовать только загрузчик. После сброса всегда должен запускаться загрузчик, который в соответствии с какими-то критериями определяет: оставаться в загрузчике для апдейта основной программы или передать ей управление. Соответственно тело загрузчика и вектор сброса переписываться апдейтом программы не должны.
Go to the top of the page
 
+Quote Post
-=MISHA=-
сообщение Nov 14 2012, 20:24
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 5-07-06
Пользователь №: 18 607



Цитата(rezident @ Nov 14 2012, 18:34) *
У вас ошибка в алгоритме/идеологии программы. Вектор RESET не может использоваться обеими программами. RESET должен использовать только загрузчик. После сброса всегда должен запускаться загрузчик, который в соответствии с какими-то критериями определяет: оставаться в загрузчике для апдейта основной программы или передать ей управление. Соответственно тело загрузчика и вектор сброса переписываться апдейтом программы не должны.

А как же быть с векторами прерываний основной программы? Они же в одном сегменте с вектором сброса загрузчика. Если их перепишу, то и вектор сброса тоже придется переписать.
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 14 2012, 23:08
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(-=MISHA=- @ Nov 15 2012, 01:24) *
А как же быть с векторами прерываний основной программы? Они же в одном сегменте с вектором сброса загрузчика. Если их перепишу, то и вектор сброса тоже придется переписать.
Для таких случаев вектора программно эмулируют перемещение векторов в другой сектор Flash или в ОЗУ. Хотя, например, в серии MSP430F5xxx даже аппаратный ремап векторов в ОЗУ реализовали. То бишь на место штатных векторов записывают адреса ячеек памяти в которых лежат команды JMP непосредственно на функции обработчиков прерываний. И обновляются не сами вектора, а та область Flash на которую они ссылаются.
Для корректного функционирования бутлоадер должен работать по опросу флагов UART, не используя прерываний UART, особенно в случае, если этот же UART используется в основном программном модуле. Кроме того, бутлоадер должен контролировать целостность прошивки основного (загружаемого) программного модуля (например по CRC) и валидность перемещенных векторов прерываний. При нарушении целостности прошивки бутлоадер не передает управление основному программному модулю, а "крутится" внутри себя.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th August 2025 - 13:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01335 секунд с 7
ELECTRONIX ©2004-2016