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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Что у STM32 после таблицы прерываний?
maxntf
сообщение Aug 15 2018, 13:31
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 15 2018, 13:44
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Достаточно лишь сделать scatter-файл (скрипт линкера), у которого FLASH начинается с нужного вам адреса и с этим файлом собрать прошивку, которую будете заливать через собственный загрузчик.
Это же можно сделать через настройки проекта.
В своем загрузчике перед передачей управления запретить все прерывания, отключить всю уже включенную периферию и настроить указатель стека SP на новое место, а уже в самом приложении до разрешения прерываний тут же сделать vector remap на новое место.
В принципе, vector remap можно делать и в самом загрузчике.

зы Эта тема с загручиком - старый махровый баян. Изобретать тут уже нечего. Пройдитесь поиском ))


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 15 2018, 14:12
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(maxntf @ Aug 15 2018, 16:31) *
Для написания собственного бутлоадера, интересует что находится между окончанием таблицы прерываний и адресом входа в основную программу (в частности начало файла startup)?

В гугл вбиваем "что такое map-файл" и читаем, читаем, читаем....

PS: Для таких вопросов есть спец. раздел: "Для начинающих".
Go to the top of the page
 
+Quote Post
maxntf
сообщение Aug 16 2018, 01:22
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008



Меня интересует, нужна ли повторная инициализация startup в основной программе, или от нее нужно избавиться?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 16 2018, 05:15
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(maxntf @ Aug 16 2018, 04:22) *
Меня интересует, нужна ли повторная инициализация startup в основной программе, или от нее нужно избавиться?

Будет лучше, если основную программу предполагать абсолютно независимой программой. Отсюда следует и ответ.
А вот рассчитывать, чтобы эта инициализация в основной проге могла стартовать:
1) либо с произвольных значений регистров периферии (в этом случае в конце бутлоадера не нужно делать деинит использованной в нём периферии, но сама инициализация сложнее);
2) либо с дефолтных после-сбросовых значений регистров периферии (в этом случае в конце бутлоадера нужно сделать деинит всей использованной периферии до дефолтных значений, в этом случае инициализация проще)
- это уже как удобнее.
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 16 2018, 05:37
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(maxntf @ Aug 16 2018, 04:22) *
Меня интересует, нужна ли повторная инициализация startup в основной программе?

Категорически обязательна! И она НЕ повторная, поскольку отличается от проекта к проекту.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
x893
сообщение Aug 16 2018, 06:54
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Можно использовать NVIC_SystemReset
Тогда и деинициализировать ничего не надо.
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 16 2018, 06:57
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(x893 @ Aug 16 2018, 09:54) *
Можно использовать NVIC_SystemReset
Тогда и деинициализировать ничего не надо.

Как я понял, речь совсем о другом - очередная попытка съэкономить на спичках уменьшить расход флэши.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
x893
сообщение Aug 16 2018, 07:04
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Конечно.
И упростить.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 16 2018, 07:26
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(x893 @ Aug 16 2018, 09:54) *
Можно использовать NVIC_SystemReset

1) ...и после сброса опять попадаем на бутлоадер. Замкнутый круг laughing.gif
Цитата(x893 @ Aug 16 2018, 09:54) *
Тогда и деинициализировать ничего не надо.

2) Не во всех МК сброс ядра вызывает и сброс периферии. Где-то для общесистемного сброса нужно использовать другие методы.
Go to the top of the page
 
+Quote Post
x893
сообщение Aug 16 2018, 07:41
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



1. Не верно, так как зависит от программиста
2. Мы говорим о STM32
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 16 2018, 07:43
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(jcxz @ Aug 16 2018, 10:26) *
1) ...и после сброса опять попадаем на бутлоадер. Замкнутый круг laughing.gif

Ставим маркер в ОЗУ и пролетаем мимо, делов-то.
Go to the top of the page
 
+Quote Post
x893
сообщение Aug 16 2018, 07:45
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Цитата(aaarrr @ Aug 16 2018, 10:43) *
Ставим маркер в ОЗУ и пролетаем мимо, делов-то.

Правильно товарищ пишет.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 16 2018, 07:45
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(x893 @ Aug 16 2018, 10:41) *
1. Не верно, так как зависит от программиста

Т.е.: если скажем возле устройства сидит программист Вася, и оно в этот момент выполняет сброс, то управление попадает в бутлоадер. А если сидит Петя, то после сброса управление попадает в другое место? biggrin.gif

Цитата(x893 @ Aug 16 2018, 10:41) *
2. Мы говорим о STM32

Хммм... Очевидно Вы работали со всеми возможными STM32 и нынешними и даже будущими? biggrin.gif
Я бы не высказывался так категорично.
Go to the top of the page
 
+Quote Post
Alechek
сообщение Aug 16 2018, 07:46
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(jcxz @ Aug 16 2018, 12:26) *
1) ...и после сброса опять попадаем на бутлоадер. Замкнутый круг laughing.gif

Даже если сбрасывается периферия, то ОЗУ остается.
простейший флаг решает задачу.

Другое дело, что у ядра не обязана быть реализация NVIC_SystemReset

Go to the top of the page
 
+Quote Post

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

 


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


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