|
Что у STM32 после таблицы прерываний? |
|
|
|
Aug 15 2018, 13:31
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008

|
Всем привет. Для написания собственного бутлоадера, интересует что находится между окончанием таблицы прерываний и адресом входа в основную программу (в частности начало файла startup)? Начинается с такого: Код 0x080000C0 F000F802 BL.W __scatterload (0x080000C8) 0x080000C4 F000F83E BL.W __rt_entry (0x08000144) 0x080000C8 A00C ADR r0,{pc}+0x34; @0x080000FC ... Это в Keil по крайне мере. В отладчике проверил, в этот кусок кода попадаем в конце выполнения startup файла. Мысль одна, что это какая то подготовка регистров ядра. Кто может подсказать, там есть что-то важное или на этот кусок не нужно обращать внимания (не трогать его вообще) и там все всегда стандартно (одинаково)? Если этот код будет дублироваться как в самом загрузчике, так и в основной программе - это нормально? Или может в проекте с основной программой нужно как то написать scatter файл, чтоб проект вообще компилировался без этой инициализации и startup файла?
Сообщение отредактировал maxntf - Aug 15 2018, 13:34
|
|
|
|
|
Aug 16 2018, 05:15
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(maxntf @ Aug 16 2018, 04:22)  Меня интересует, нужна ли повторная инициализация startup в основной программе, или от нее нужно избавиться? Будет лучше, если основную программу предполагать абсолютно независимой программой. Отсюда следует и ответ. А вот рассчитывать, чтобы эта инициализация в основной проге могла стартовать: 1) либо с произвольных значений регистров периферии (в этом случае в конце бутлоадера не нужно делать деинит использованной в нём периферии, но сама инициализация сложнее); 2) либо с дефолтных после-сбросовых значений регистров периферии (в этом случае в конце бутлоадера нужно сделать деинит всей использованной периферии до дефолтных значений, в этом случае инициализация проще) - это уже как удобнее.
|
|
|
|
|
Aug 16 2018, 07:26
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(x893 @ Aug 16 2018, 09:54)  Можно использовать NVIC_SystemReset 1) ...и после сброса опять попадаем на бутлоадер. Замкнутый круг Цитата(x893 @ Aug 16 2018, 09:54)  Тогда и деинициализировать ничего не надо. 2) Не во всех МК сброс ядра вызывает и сброс периферии. Где-то для общесистемного сброса нужно использовать другие методы.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|