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

 
 
6 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> STM32: сброс всей периферии перед переходом из загрузчика в основную прошивку
Golikov A.
сообщение May 21 2014, 09:27
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ножка? Одна единственная на кнопке? Которая и в основной программе остается такой же?

Ну вообще да флаг через EEPROM, Еще PLL настроить, но это делается и в основной проге, просто данный момент пропускается...
Go to the top of the page
 
+Quote Post
scifi
сообщение May 21 2014, 09:31
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(A. Fig Lee @ May 21 2014, 17:35) *
Флаг надо както передать. EEPROM?

Зачем EEPROM? При "теплом" сбросе содержимое ОЗУ на чипе сохраняется.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 21 2014, 09:34
Сообщение #33


Знающий
****

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



Цитата(Golikov A. @ May 21 2014, 08:37) *
ножка? Одна единственная на кнопке? Которая и в основной программе остается такой же?

Ну вообще да флаг через EEPROM, Еще PLL настроить, но это делается и в основной проге, просто данный момент пропускается...

Не только ножка. Состояние прерываний остается тем же.
То есть, если они запрещены, то в основной программе надо explicitly разрешать.
По прежнему не вижу большого смысла в выполенении ресета

Цитата(scifi @ May 21 2014, 08:41) *
Зачем EEPROM? При "теплом" сбросе содержимое ОЗУ на чипе сохраняется.

А в чем разница?
Разве не по офному и тому же аддрессу переход происходит пристарте?
Каким волшебным образом при холодном старте обнуляется RAM, если
не самой программой?


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 21 2014, 09:36
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 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 сменилось с быстрых на ошибочные, это все равно не для кортексов М
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 21 2014, 09:40
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 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, если
не самой программой?

Обнуляется программой...Можно зарезервировать ячейку в ОЗУ и проверять её на старте и в зависимости от её значения решать что делать дальше - запускать программу, запускать бут или ещё что-то.
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 21 2014, 09:41
Сообщение #36


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Из User Guide на Cortex-M
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 21 2014, 09:47
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 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:

получается его одного достаточно чтобы все выключить? даже примаск?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 21 2014, 10:08
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 21 2014, 10:13
Сообщение #39


Знающий
****

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



Цитата(_Артём_ @ May 21 2014, 08:50) *
Обнуляется программой...Можно зарезервировать ячейку в ОЗУ и проверять её на старте и в зависимости от её значения решать что делать дальше - запускать программу, запускать бут или ещё что-то.

Это значит надо писать собственный startup файл.
Тоже можно, конечно.. Но по мне так это уже извращения пошли.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
scifi
сообщение May 21 2014, 10:20
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(A. Fig Lee @ May 21 2014, 18:23) *
Это значит надо писать собственный startup файл.
Тоже можно, конечно.. Но по мне так это уже извращения пошли.

Стартапа бояться - загрузчик не писать. Ну что за цирк, ей-богу :-)
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 21 2014, 10:22
Сообщение #41


Знающий
****

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



Цитата(scifi @ May 21 2014, 09:30) *
Стартапа бояться - загрузчик не писать. Ну что за цирк, ей-богу :-)

А мы без всяких самодельных стартапов и ресетов обошлись.
Чем больше меняешь, тем больше багов.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 21 2014, 10:23
Сообщение #42


Гуру
******

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



Цитата(A. Fig Lee @ May 21 2014, 18:23) *
Это значит надо писать собственный startup файл.
Тоже можно, конечно.. Но по мне так это уже извращения пошли.

Можно отредактировать startup, который есть: всего-то несколько строк добавить.
Код
               if ((FlashCrcOk()) && (StartType==START_APPLICATION)) {
        __disable_irq();
        __set_MSP(*(uint32_t *)0x1008);
        ISRPtr application_reset_handler=(ISRPtr)(*(uint32_t *)0x100C);
        goto *application_reset_handler;
              
                }
Go to the top of the page
 
+Quote Post
scifi
сообщение May 21 2014, 10:30
Сообщение #43


Гуру
******

Группа: Свой
Сообщений: 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();
}
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 21 2014, 10:43
Сообщение #44


Знающий
****

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



Это не стартап, это ресет хэндлер.
Никто не спорит про разобратся, но переделывать не вижу смысла.

В любом случае, как обслуживать ситуацию,
когда в данной ячейке при холодном старте флаг случайно совпал с тем, который выставляется
для прыгания в главную программу?
Может еще один флаг добавим?
Может, CRC считать начнем?


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 21 2014, 10:48
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 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 прошивки посчитать всё равно желательно, а то вдруг там пусто.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:33
Рейтинг@Mail.ru


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