|
|
  |
STM32: сброс всей периферии перед переходом из загрузчика в основную прошивку |
|
|
|
May 21 2014, 09:34
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(Golikov A. @ May 21 2014, 08:37)  ножка? Одна единственная на кнопке? Которая и в основной программе остается такой же?
Ну вообще да флаг через EEPROM, Еще PLL настроить, но это делается и в основной проге, просто данный момент пропускается... Не только ножка. Состояние прерываний остается тем же. То есть, если они запрещены, то в основной программе надо explicitly разрешать. По прежнему не вижу большого смысла в выполенении ресета Цитата(scifi @ May 21 2014, 08:41)  Зачем EEPROM? При "теплом" сбросе содержимое ОЗУ на чипе сохраняется. А в чем разница? Разве не по офному и тому же аддрессу переход происходит пристарте? Каким волшебным образом при холодном старте обнуляется RAM, если не самой программой?
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
May 21 2014, 09:36
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
от ресета внутренне спокойно... вот что кеил написал в хелпе Цитата __disable_fiq
Typically, this intrinsic disables FIQ interrupts by setting the F-bit in the CPSR. However, for v7-M it sets the fault mask register (FAULTMASK). FIQ interrupts are not supported in v6-M. то есть на самом деле это от 7 армов тянется, и несмотря что FIQ сменилось с быстрых на ошибочные, это все равно не для кортексов М
|
|
|
|
|
May 21 2014, 09:40
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Golikov A. @ May 21 2014, 17:35)  ну то есть надо понимать что осталось одно __disable_irq(); которое глушит все кроме ресета и NMI? Почему? __disable_irq() это : Код CPSID i ; Disable interrupts and configurable fault handlers (set PRIMASK) HardFault не запрещается после __disable_irq. HardFault запретится после CPSID f. Вроде так выходит... Цитата(A. Fig Lee @ May 21 2014, 17:44)  А в чем разница? Разве не по офному и тому же аддрессу переход происходит пристарте? Каким волшебным образом при холодном старте обнуляется RAM, если не самой программой? Обнуляется программой...Можно зарезервировать ячейку в ОЗУ и проверять её на старте и в зависимости от её значения решать что делать дальше - запускать программу, запускать бут или ещё что-то.
|
|
|
|
|
May 21 2014, 09:47
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
путано написано, в описании на проц LPC1768, в части про кортекс м3 есть запись про HARDFAULTMASK, в наборе инструкций кортекса м3 есть такое... В описании на серию кортексов М0-4, нету... даже нет HardFaule Mask регистра.... и как это понимать? поправочка------------- http://infocenter.arm.com/help/index.jsp?t...a/CHDBIBGJ.htmlу М3, и М4 есть, называется FAULTMASK, и флажочек тоже есть Цитата The FAULTMASK register prevents activation of all exceptions except for Non-Maskable Interrupt (NMI). See the register summary in Table 2.2 for its attributes. The bit assignments are: получается его одного достаточно чтобы все выключить? даже примаск?
|
|
|
|
|
May 21 2014, 10:08
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Golikov A. @ May 21 2014, 17:57)  путано написано, в описании на проц LPC1768, в части про кортекс м3 есть запись про HARDFAULTMASK, в наборе инструкций кортекса м3 есть такое... В каком пункте мануала про HARDFAULTMASK написано? Цитата(Golikov A. @ May 21 2014, 17:57)  получается его одного достаточно чтобы все выключить? даже примаск? Получается достаточно - кроме NMI и Reset.
|
|
|
|
|
May 21 2014, 10:13
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(_Артём_ @ May 21 2014, 08:50)  Обнуляется программой...Можно зарезервировать ячейку в ОЗУ и проверять её на старте и в зависимости от её значения решать что делать дальше - запускать программу, запускать бут или ещё что-то. Это значит надо писать собственный startup файл. Тоже можно, конечно.. Но по мне так это уже извращения пошли.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
May 21 2014, 10:22
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(scifi @ May 21 2014, 09:30)  Стартапа бояться - загрузчик не писать. Ну что за цирк, ей-богу :-) А мы без всяких самодельных стартапов и ресетов обошлись. Чем больше меняешь, тем больше багов.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
May 21 2014, 10:30
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(A. Fig Lee @ May 21 2014, 18:32)  А мы без всяких самодельных стартапов и ресетов обошлись. Чем больше меняешь, тем больше багов. На самом деле бывает полезно разбираться в стартапе. Тем более на Cortex-M минимальный стартап - это всего несколько строчек: CODE #include <string.h>
extern char __etext, __data_start__, __data_end__, __bss_start__, __bss_end__; extern int main();
void __attribute((used)) Reset_Handler(void) { /* copy-init variables */ memcpy(&__data_start__, &__etext, &__data_end__ - &__data_start__); /* zero-init variables */ memset(&__bss_start__, 0, &__bss_end__ - &__bss_start__); (void)main(); }
|
|
|
|
|
May 21 2014, 10:48
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(A. Fig Lee @ May 21 2014, 18:53)  Это не стартап, это ресет хэндлер. Ну так стартап состоит из двух частей - таблицы векторов и Reset_Handler-а. Таблица у каждого МК своя и её менять не надо. Цитата(A. Fig Lee @ May 21 2014, 18:53)  В любом случае, как обслуживать ситуацию, когда в данной ячейке при холодном старте флаг случайно совпал с тем, который выставляется для прыгания в главную программу? Маловероятно... Цитата(A. Fig Lee @ May 21 2014, 18:53)  Может еще один флаг добавим? Может, CRC считать начнем? К тому же CRC прошивки посчитать всё равно желательно, а то вдруг там пусто.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|