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

 
 
> Cortex-Mx, исключительные ситуации
dimka76
сообщение Sep 14 2018, 17:03
Сообщение #1


developer
****

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



Здравствуйте.

Возник такой вопрос.

Можно ли из обработчиков исключительных ситуаций вызывать функции ?
Не возникнет ли проблем со стеком ?

И еще.
Насколько я понимаю, обработчики исключительных ситуаций не могут прерваться прерываниями
от периферии ?


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


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

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



Цитата(dimka76 @ Sep 14 2018, 20:03) *
Можно ли из обработчиков исключительных ситуаций вызывать функции ?
Не возникнет ли проблем со стеком ?

В целом, такое прерывание не сильно то и отличается от всех других прерываний, поэтому вызов функций в них не запрещен, ведь для ядра нет понятия функция или т.п., но есть НО:
Если такое исключение возникло именно из-за проблем со стеком, то логично предположить, что сразу пользоваться стеком не стоит (точнее, таким указателем стека).
Также нужно учесть, что для прерываний обычно используют другой стек (точнее, указатель стека), особенно если применяется RTOS.
Более подробную информацию лучше см. в документации на выбранное ядро.

Цитата
Насколько я понимаю, обработчики исключительных ситуаций не могут прерваться прерываниями
от периферии ?

Да, не могут, поскольку приоритет обработчиков исключительных ситуаций имеют наивысший приоритет. Ведь в этом весь смысл таких прерываний ))

зы Дабы не изобретать велосипед, посмотрите в сторону уже существует готовых вариантов обслуживания исключений, в т.ч. на этом форуме.


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


developer
****

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



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


Вот этот вариант и навел на вопрос. Спасибо, что подтвердили мои опасения.
У меня план такой. При попадании в исключительную ситуацию перевести некоторые ноги МК в определенное состояние.
И после этого зависнуть в этом прерывании навсегда.
А вот для управления нужными ногами у меня есть свои функции. Можно конечно прямо в прерывании
через регистры переключить ноги. Но мне кажется, что с точки зрения архитектуры программы это не правильно.

Думаю перед вызовом функции заново проинициализировать указатель стека значением из нулевого адреса.

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


RTOS не используется и режим работы не меняется. Поэтому указатель один, если я не ошибаюсь конечно )))


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


Гуру
******

Группа: Свой
Сообщений: 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
Forger
сообщение Sep 15 2018, 06:42
Сообщение #5


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

Группа: Свой
Сообщений: 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   Cortex-Mx   Sep 14 2018, 17:03
|- - Forger   Цитата(dimka76 @ Sep 14 2018, 20:37) Вот ...   Sep 14 2018, 17:50
|- - scifi   Цитата(dimka76 @ Sep 14 2018, 20:37) У ме...   Sep 14 2018, 18:09
||- - Forger   Цитата(scifi @ Sep 14 2018, 21:09) Предла...   Sep 14 2018, 18:24
|||- - scifi   Цитата(Forger @ Sep 14 2018, 21:24) Увы, ...   Sep 14 2018, 18:29
|||- - Forger   Цитата(scifi @ Sep 14 2018, 21:29) Это уж...   Sep 14 2018, 18:33
|||- - aaarrr   Цитата(Forger @ Sep 14 2018, 21:33) Не со...   Sep 14 2018, 18:53
||||- - Forger   Цитата(aaarrr @ Sep 14 2018, 21:53) А что...   Sep 14 2018, 18:55
||||- - aaarrr   Цитата(Forger @ Sep 14 2018, 21:55) У STM...   Sep 14 2018, 18:58
||||- - Forger   Цитата(aaarrr @ Sep 14 2018, 21:58) Честн...   Sep 14 2018, 19:02
||||- - scifi   Цитата(Forger @ Sep 14 2018, 22:02) Честн...   Sep 14 2018, 19:04
|||||- - Forger   Цитата(scifi @ Sep 14 2018, 22:04) Сенсац...   Sep 14 2018, 19:05
||||- - scifi   Цитата(Forger @ Sep 14 2018, 22:02) ОЗУ б...   Sep 14 2018, 19:05
||||- - Forger   Цитата(scifi @ Sep 14 2018, 22:05) Будьте...   Sep 14 2018, 19:20
||||- - aaarrr   Цитата(Forger @ Sep 14 2018, 22:20) https...   Sep 14 2018, 19:52
||||- - Forger   Цитата(aaarrr @ Sep 14 2018, 22:52) чем л...   Sep 14 2018, 20:29
||||- - aaarrr   Цитата(Forger @ Sep 14 2018, 23:29) Вот е...   Sep 14 2018, 20:37
|||- - scifi   Цитата(Forger @ Sep 14 2018, 21:33) Не со...   Sep 14 2018, 19:00
|||- - dimka76   Цитата(Forger @ Sep 14 2018, 21:33) Да вс...   Sep 14 2018, 19:52
|||- - AlexandrY   Цитата(dimka76 @ Sep 14 2018, 22:52) Тема...   Sep 15 2018, 04:24
||- - dimka76   Цитата(scifi @ Sep 14 2018, 21:09) Предла...   Sep 14 2018, 19:45
|- - dimka76   Цитата(jcxz @ Sep 15 2018, 08:18) Сам выз...   Sep 16 2018, 16:38
|- - jcxz   Цитата(dimka76 @ Sep 16 2018, 19:38) Напр...   Sep 17 2018, 06:25
|- - dimka76   Цитата(jcxz @ Sep 17 2018, 09:25) А если ...   Sep 18 2018, 19:13
|- - DASM   Цитата(jcxz @ Sep 17 2018, 09:25) В Corte...   Sep 20 2018, 15:09
|- - jcxz   Цитата(DASM @ Sep 20 2018, 18:09) а как о...   Sep 20 2018, 18:38
- - DASM   жирные вы тут.. скомпилировал с -fexception, полу...   Sep 15 2018, 06:29


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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 20:51
Рейтинг@Mail.ru


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