|
Помогите выгрузить ОС и перейти в Bootloader, STM32, ChibiOS |
|
|
|
Jan 8 2015, 16:58
|

В поисках истины
  
Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923

|
Всем првиеТ!
Экспериментирую с bootloader и пока сделал так: в самое начало Flash располагаю Bootloader, а с 0x0800400 первый попавшийся пример с USART из набора ChibiOS (ессестно с измененным .ld скриптом, чтобы начиналось всё с 0x0800400). Бутлоадер проверяет не нажата ли кнопочка при подаче питания на протяжении там 500ms и если нет, то перекидывает таблицу указателей и стек "на основное приложение", ежеле нажата кнопочка, то загружается сам и делает своё грязное дело. Ну всё примитивно просто и как обычно. Теперь захотелось странного - загрузить бутлоадер из приложения. Самое простое сделать SoftReset, но надо держать кнопочку. тогда я сделал ячейку в памяти куда пишу флаг и снова переношу таблицу векторов и вызываю ResetHandler бутлоадера. Но вот беда, всё падает и зависает. Нет, переходить то оно переходит, но вызываются какие-то прерывания, видать которые были настроены в примере. Я пошёл в ЛОБ - перечислил перед переносом таблицы прерывания все регистры переферии, где можно было бы разрешить прерывание и запретил их наверняка. Отключил SysTick. Но ВСЁ РАВНО что-то происходит и bootloader зависает в Assert вызванный из заглушки на прерывание. Есть способ выяснить что его вызывает? Дебагер не видит какое прерывание прыгнуло в этот указатель - back trace тупо начинается сразу с Assert(). Сижу вот и описываю все вектора в пустышки, дабы понять какая именно пустышка вызывается.
|
|
|
|
|
 |
Ответов
|
Jan 10 2015, 08:03
|

В поисках истины
  
Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923

|
Цитата(Сергей Борщ @ Jan 9 2015, 22:53)  Такой флажок у вас уже есть, он называется RCC_CSR_SFTRSTF и лежит в RCC->CSR. Просто делайте программный сброс и проверяйте его в загрузчике. После проверки сбрасывайте битом RCC_CSR_RMVF. После окончания загрузки сбрасывайте процессор собакой, это позволит не попасть снова в загрузку после сброса. Думал об этом. Но в программу у меня хорошо получается переходить переносом прерывайний и всего такого. Цитата(A. Fig Lee @ Jan 9 2015, 22:04)  Как после хард ресета, все в 0. он же переходит на начальный аддресс, там обнуление глобальной памяти, поэтому и надо __no_init для какойто ячейки, чтоб ЕЕ не обнуляли никогда Просто интересно было, если не учитывать действия "софта" содержимое RAM после софтового сброса сохраняется...
|
|
|
|
|
Jan 10 2015, 12:28
|

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

|
Цитата(Alexey Belyaev @ Jan 10 2015, 10:03)  Думал об этом. Но в программу у меня хорошо получается переходить переносом прерывайний и всего такого. Пока получается. Усложните загрузчик - начнется цирк. После того, как ваша программа или загрузчик запустит кучу прерываний, что будет вызываться после подмены таблицы векторов? А если программа или загрузчик еще и ПДП запустит - будет вообще весело, когда ПДП начнет складывать данные поверх данных загрузчика/программы. Сброс гарантирует, что все последствия работы предыдущей программы будут устранены. И достигается это минимальными усилиями - одной командой сброса. Приводить периферию в исходное состояние вручную гораздо сложнее. То есть при переходе в программу вам нужно будет переносить прерывания и все такое, но делать это желательно сразу после сброса, пока периферия находится в нетронутом состоянии.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
Alexey Belyaev Помогите выгрузить ОС и перейти в Bootloader Jan 8 2015, 16:58 A. Fig Lee Цитата(Alexey Belyaev @ Jan 8 2015, 11:58... Jan 8 2015, 20:46 Alexey Belyaev А как поймать?
Яж написал, что не хочу ресет, ибо ... Jan 9 2015, 17:41 A. Fig Lee Цитата(Alexey Belyaev @ Jan 9 2015, 12:41... Jan 9 2015, 18:09 Alexey Belyaev а RAM проца после SoftReset в каком состоянии? Jan 9 2015, 18:17 A. Fig Lee Цитата(Alexey Belyaev @ Jan 9 2015, 13:17... Jan 9 2015, 19:04   Alexey Belyaev Цитата(Сергей Борщ @ Jan 10 2015, 15:28) ... Jan 10 2015, 16:09
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|