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

 
 
 
Reply to this topicStart new topic
> Написание bootloader, для Cortex-M3
_Артём_
сообщение Jul 17 2012, 20:03
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Добрый вечер.
Смотрю сейчас пример реализации boot для CM3 и как-то стало мне странно - используются прерывания. Раньше когда писал boot для AVR прерывания не использовал.

Есть ли смысл так делать для Cortex-M3:
1. Сократить таблицу до SP и Reset_Handler-a
2. Проверять флаги UART_RX и SysTick вместо прерываний.

?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 18 2012, 08:33
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (_Артём_ @ Jul 17 2012, 23:03) *
Смотрю сейчас пример реализации boot для CM3 и как-то стало мне странно - используются прерывания.
Что же в этом странного, если есть возможность переключать таблицу векторов?
QUOTE (_Артём_ @ Jul 17 2012, 23:03) *
Раньше когда писал boot для AVR прерывания не использовал.
А я использовал. В тех AVR, где есть IVSEL. В меге48 не использовал - там такой возможности нет.
QUOTE (_Артём_ @ Jul 17 2012, 23:03) *
Есть ли смысл так делать для Cortex-M3:
Если загрузчик должен делать все и еще бегать за пивом, но при этом умещаться в первую страницу флеша размером в 4К, то наверное смысл есть. Если же флеша на загрузчик хватает - то зачем?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 18 2012, 20:28
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Сергей Борщ @ Jul 18 2012, 11:33) *
Что же в этом странного, если есть возможность переключать таблицу векторов?

Да, наверное неиспользование прерываний - пережитки прошлого.


Цитата(Сергей Борщ @ Jul 18 2012, 11:33) *
Если же флеша на загрузчик хватает - то зачем?


Да, смысла нет в такой экономии. Экономия на таблице - сотня-другая байт.

Спасибо.
Go to the top of the page
 
+Quote Post
Hamster1979
сообщение Jul 19 2012, 07:47
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 26-03-05
Пользователь №: 3 697



Цитата
Что же в этом странного, если есть возможность переключать таблицу векторов?
Возможность переключать таблицу векторов есть практически всегда, вопрос только как она реализована - аппаратно(как в AVR, где есть IVSEL, Cortex-M3) или на многих микроконтроллерах можно ее реализовать программно(если команды ассемблера позволяют вызвать обработчик прерывания из ОЗУ). Например я реализовывал бутлоадер с прерываниями на MSP430 - аппаратной возможности переключения таблицы нет, прерывания запускаю по адресу из ОЗУ (фиксированная область памяти, как бы програмная таблица прерывания получается , туда просто в бутлоадере свои указатели на обработчики пишешь, а в основной программе в ту же область памяти свои прописываешь).

Сообщение отредактировал Hamster1979 - Jul 19 2012, 07:49
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 19 2012, 09:25
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Hamster1979 @ Jul 19 2012, 10:47) *
или на многих микроконтроллерах можно ее реализовать программно
Да, безусловно. На MSP430 я тоже делал подобное. Но конкретно в меге48 4К кода всего (на загрузчик и приложение) и реализация программного переключения отжирает слишком много кода. Не стоит там девчинка вые... овчинка выделки.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 10:47
Рейтинг@Mail.ru


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