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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> 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
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
Forger
сообщение Sep 14 2018, 17:50
Сообщение #4


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

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



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

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

Цитата
А вот для управления нужными ногами у меня есть свои функции. Можно конечно прямо в прерывании
через регистры переключить ноги. Но мне кажется, что с точки зрения архитектуры программы это не правильно.

С "точки зрения архитектуры" в обработчике прерывания нужно сделать все, чтобы сделать девайс безопасным. Как можно быстрее!
Как именно это будет сделано - вопрос второстепенный.
Самое простое - тупо вызвать принудительный сброс всего проца.

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


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


Гуру
******

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



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

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

Предлагаю другой план. Устанавливаем некий флаг "перевести ноги и зависнуть", вызываем программный сброс. Программа при старте проверяет условие "сброс == программный && флаг == установлен". Ну и при выполнении условия делает что надо. Так проще.
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 14 2018, 18:24
Сообщение #6


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

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



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

Увы, на некоторых процах программный сброс != аппаратному сбросу.



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


Гуру
******

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



Цитата(Forger @ Sep 14 2018, 21:24) *
Увы, на некоторых процах программный сброс != аппаратному сбросу.

Это уж пусть ТС разбирается. Во всяком случае, на STM32 команда программного сброса физически дёргает ногу RST. И даже не сбросится, если ногу подтянуть так, что дёргание не осилит.
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 14 2018, 18:33
Сообщение #8


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

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



Цитата(scifi @ Sep 14 2018, 21:29) *
Это уж пусть ТС разбирается.

Да вся эта тема - по сути баян, но раз уж подняли муть со дна, то не грех и чуток погундеть, благо пятница rolleyes.gif

Цитата
Во всяком случае, на STM32 команда программного сброса физически дёргает ногу RST.

Не совсем - содержимое ОЗУ все же сохраняется. Но это даже к лучшему ))




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


Гуру
******

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



Цитата(Forger @ Sep 14 2018, 21:33) *
Не совсем - содержимое ОЗУ все же сохраняется. Но это даже к лучшему ))

А что, POR сбрасывает ОЗУ?
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 14 2018, 18:55
Сообщение #10


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

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



Цитата(aaarrr @ Sep 14 2018, 21:53) *
А что, POR сбрасывает ОЗУ?

У STM32 - не сбрасывает, просто в этом случае там будет "каша".


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


Гуру
******

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



Цитата(Forger @ Sep 14 2018, 21:55) *
У STM32 - не сбрасывает, просто в этом случае там "каша".

Честно говоря, не знаю семейств, где бы сброс обнулял содержимое ОЗУ. Хотя вполне допускаю, что и такое встречается.
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 14 2018, 19:00
Сообщение #12


Гуру
******

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



Цитата(Forger @ Sep 14 2018, 21:33) *
Не совсем - содержимое ОЗУ все же сохраняется. Но это даже к лучшему ))

Ага, лишь бы возразить. У ОЗУ не бывает сигнала сброса. Ну или это какое-то чудесатое ОЗУ.
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 14 2018, 19:02
Сообщение #13


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

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



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

Честно говоря тоже, но в свете новых событий обнуление ОЗУ при сбросе становится уже необходимостью laughing.gif


Цитата(scifi @ Sep 14 2018, 22:00) *
У ОЗУ не бывает сигнала сброса.

ОЗУ бывают разные, в том числе внешние


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


Гуру
******

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



Цитата(Forger @ Sep 14 2018, 22:02) *
Честно говоря тоже, но в свете новых событий обнуление ОЗУ при сбросе становится уже необходимостью laughing.gif

Сенсация. Обнаружен способ стащить деньги из кошелька. Для этого нужен физический доступ к кошельку.
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 14 2018, 19:05
Сообщение #15


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

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



Цитата(scifi @ Sep 14 2018, 22:04) *
Сенсация. Обнаружен способ стащить деньги из кошелька. Для этого нужен физический доступ к кошельку.

Цитата(scifi)
Ага, лишь бы возразить.


rolleyes.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
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 - 11:27
Рейтинг@Mail.ru


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