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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Cortex-Mx, исключительные ситуации
scifi
сообщение Sep 14 2018, 19:05
Сообщение #16


Гуру
******

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



Цитата(Forger @ Sep 14 2018, 22:02) *
ОЗУ бывают разные, в том числе внешние

Будьте любезны, дайте ссылочку на внешнее ОЗУ с сигналом сброса.
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 14 2018, 19:20
Сообщение #17


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

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



Цитата(scifi @ Sep 14 2018, 22:05) *
Будьте любезны, дайте ссылочку на внешнее ОЗУ с сигналом сброса.

https://www.maximintegrated.com/en/products...cts/DS1200.html


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


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(scifi @ Sep 14 2018, 21:09) *
Предлагаю другой план. Устанавливаем некий флаг "перевести ноги и зависнуть", вызываем программный сброс. Программа при старте проверяет условие "сброс == программный && флаг == установлен". Ну и при выполнении условия делает что надо. Так проще.


По-моему проще в обработчике исключения
Код
__set_MSP(TOP_RAM_ADDR);


Дальше дернуть ногой через функцию - она уже есть и активно используется в разных местах колда.
И зависнуть.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 14 2018, 19:52
Сообщение #19


Гуру
******

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



Цитата(Forger @ Sep 14 2018, 22:20) *

Сказали бы тогда, что любая DDR3+ подходит под определение "внешнее ОЗУ с сигналом сброса", чем людей экзотикой пугать.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 14 2018, 19:52
Сообщение #20


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Forger @ Sep 14 2018, 21:33) *
Да вся эта тема - по сути баян,


Тема не как реализовывать обработчик исключений, а насколько безопасно просто так из него вызывать функции ))))


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 14 2018, 20:29
Сообщение #21


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

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



Цитата(aaarrr @ Sep 14 2018, 22:52) *
чем людей экзотикой пугать.

Ну, какой был вопрос, такой же и вышел ответ wink.gif

Экзотика - это нужда в бытовых МК в обнулении содержимого ОЗУ после сброса.

Вот есть мысля: при исключении писать в определенную область ОЗУ отладочную информацию, делать программный сброс (в STM32 типа NVIC Reset), а в коде при старте каждый раз проверять содержимое этой области.
Отличить полезную инфу от мусора в ОЗУ можно с помощью примитивных "маркеров" или элементарной контрольной суммы. Разумеется, эти данные нужно объявлять с соотв. квалификаторами или в соотв. не стираемой при старте секции.
Если есть "чё", то писать это уже в реальный энергонезависимый журнал (на флэшку, sd-карточкуи т.п.) и жить дальше до очередного HF ))


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


Гуру
******

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



Цитата(Forger @ Sep 14 2018, 23:29) *
Вот есть мысля: при исключении писать в определенную область ОЗУ отладочную информацию, делать программный сброс (в STM32 типа NVIC Reset), а в коде при старте каждый раз проверять содержимое этой области.

Много лет использую именно такой механизм. Хорошее, годное решение.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Sep 15 2018, 04:24
Сообщение #23


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(dimka76 @ Sep 14 2018, 22:52) *
Тема не как реализовывать обработчик исключений, а насколько безопасно просто так из него вызывать функции ))))

Периферия после сбоя может быть в отключенном из адресного пространства состоянии.
Обычными "функциями" я бы пользоваться не рисковал.
Некоторые прерывания, например от WDOG, в принципе вам дают всего сотню тактов до сброса.
Поэтому только прямое обращение к регистрам.
Кстати, сбой и последующий reset может привести и к переходу на код в Bootloader-е, тогда и на RAM надеяться нельзя.
Практичней думать о таких ситуациях учитывая бутлодер. А он может быть и в ROM-е и даже не документирован.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 15 2018, 05:18
Сообщение #24


Гуру
******

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



Цитата(dimka76 @ Sep 14 2018, 20:37) *
У меня план такой. При попадании в исключительную ситуацию перевести некоторые ноги МК в определенное состояние.
И после этого зависнуть в этом прерывании навсегда.
А вот для управления нужными ногами у меня есть свои функции.

Выполняете CPSID I, CPSID F и после этого спокойно вызываете свои функции и зависаете. Только эти "свои функции" должны быть реентерабельны.

Цитата(aaarrr @ Sep 14 2018, 21:58) *
Честно говоря, не знаю семейств, где бы сброс обнулял содержимое ОЗУ. Хотя вполне допускаю, что и такое встречается.

Не обнуляется, но затирается часть - у многих.

Цитата(dimka76 @ Sep 14 2018, 22:52) *
Тема не как реализовывать обработчик исключений, а насколько безопасно просто так из него вызывать функции ))))

Сам вызов безопасен. А почему он должен быть не безопасен?
Только функция обязательно должна быть реентерабельной. Так как исключение может произойти в любой точке программы.

Цитата(dimka76 @ Sep 14 2018, 22:45) *
По-моему проще в обработчике исключения
Код
__set_MSP(TOP_RAM_ADDR);

А вот так делать - как раз не безопасно. Если уж и переустанавливать указатель стека, то на вершину существующего выделенного статически стека.

Цитата(AlexandrY @ Sep 15 2018, 07:24) *
Периферия после сбоя может быть в отключенном из адресного пространства состоянии.

Это на каком-же из МК (соответствующих заголовку темы) такое делается? wacko.gif

Цитата(Forger @ Sep 14 2018, 23:29) *
Вот есть мысля: при исключении писать в определенную область ОЗУ отладочную информацию, делать программный сброс (в STM32 типа NVIC Reset), а в коде при старте каждый раз проверять содержимое этой области.
Отличить полезную инфу от мусора в ОЗУ можно с помощью примитивных "маркеров" или элементарной контрольной суммы. Разумеется, эти данные нужно объявлять с соотв. квалификаторами или в соотв. не стираемой при старте секции.

Лучше использовать соответствующий периферийный регистр, где флажками указан тип сброса (POR, внешняя нога, WDT, программный, ...) и не возиться с флагами в ОЗУ, которые нужно ещё и правильно расположить.
Go to the top of the page
 
+Quote Post
DASM
сообщение Sep 15 2018, 06:29
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



жирные вы тут.. скомпилировал с -fexception, получил 86К кода хелло ворд на О3, приуныл и забил
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 15 2018, 06:42
Сообщение #26


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

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



Цитата(jcxz @ Sep 15 2018, 08:18) *
Лучше использовать соответствующий периферийный регистр, где флажками указан тип сброса (POR, внешняя нога, WDT, программный, ...) и не возиться с флагами в ОЗУ, которые нужно ещё и правильно расположить.

Аппаратные флажки-то - это само собой.
Но имелось ввиду проверять валидность (актуальность) самих данных, дабы не спутать их с мусором в ОЗУ и не записать это мусор в журнал.


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


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(jcxz @ Sep 15 2018, 08:18) *
Сам вызов безопасен. А почему он должен быть не безопасен?

Например, как писали выше, вот поэтому

Цитата(Forger @ Sep 14 2018, 20:19) *
Если такое исключение возникло именно из-за проблем со стеком, то логично предположить, что сразу пользоваться стеком не стоит (точнее, таким указателем стека).


Цитата(jcxz @ Sep 15 2018, 08:18) *
Выполняете CPSID I, CPSID F и после этого спокойно вызываете свои функции и зависаете

Я так понимаю это команды запрещения прерываний и исключительных ситуаций.
А зачем они в обработчике исключений ?
Их же и так никто прервать не может.

Цитата(jcxz @ Sep 15 2018, 08:18) *
Только функция обязательно должна быть реентерабельной.

Мои функции дергания норкой таковыми и являются. Просто запись в регистр порта ввода вывода.

Цитата(jcxz @ Sep 15 2018, 08:18) *
Если уж и переустанавливать указатель стека, то на вершину существующего выделенного статически стека.

Я в своем сообщении это и имел ввиду, просто наверное некорректно изъяснился.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 17 2018, 06:25
Сообщение #28


Гуру
******

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



Цитата(dimka76 @ Sep 16 2018, 19:38) *
Например, как писали выше, вот поэтому

В Cortex-M при вызове функции стек не используется. Внутри функции он конечно может быть использован, но только если она вызывает другие функции или имеет много локальных переменных. Но Вы пишете, что внутри только - дёргание ногой. Тогда - о каком стеке вообще речь?

Цитата(dimka76 @ Sep 16 2018, 19:38) *
Я так понимаю это команды запрещения прерываний и исключительных ситуаций.
А зачем они в обработчике исключений ?
Их же и так никто прервать не может.

Это - запрет и разрешение прерываний. Не могут прервать только исключения с приоритетом ниже.

Цитата(dimka76 @ Sep 16 2018, 19:38) *
Мои функции дергания норкой таковыми и являются. Просто запись в регистр порта ввода вывода.

А если это исключение произошло до того как сконфигурили ногу (которой хотите дёрнуть) на вывод? Просто повиснете навсегда?
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 18 2018, 19:13
Сообщение #29


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(jcxz @ Sep 17 2018, 09:25) *
А если это исключение произошло до того как сконфигурили ногу (которой хотите дёрнуть) на вывод? Просто повиснете навсегда?


Это ножка включает/выключает внешнее устройство. Если ножка не сконфигурирована, то устройство выключено. А в обработчике исключения я хочу это внешнее устройство выключать. Значит все нормально будет )))

В принципе, я получил ответ на свои вопросы.
Все откликнувшимся спасибо !!!


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
DASM
сообщение Sep 20 2018, 15:09
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(jcxz @ Sep 17 2018, 09:25) *
В Cortex-M при вызове функции стек не используется.

а как он вызовет он передаст ,к примеру 35 аргументов в нее?
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 Текстовая версия Сейчас: 19th April 2024 - 22:51
Рейтинг@Mail.ru


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