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

 
 
> Запуск процесса на одном уровне прерывания, из разных уровней прерываний
Hexel
сообщение Jun 8 2018, 19:01
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 13-03-12
Из: Украина
Пользователь №: 70 785



Добрый день!

Ув. коллеги, подскажите пожалуста, как вызывая подпрограмму из разных уровней прерываний, обеспечить ее завершение таким образом, чтобы она не была прервана из более высокого приоритета? Речь идет об диспетчере событий (собственная терминология =), который фильтрует события из разных модулей и сохраняет отчет в EEPROM. Разрыв в неподходящий момент непременно приведет к порчи лога, и заметить это будет сложно.
Например, чтобы при вызове такая процедура работала на самом высоком уровне. Я полистал документацию по АРМ, но даже не знаю, где копать. Отключать прерывания нахрен до завершения - топорно, но должно работать) По-моему, еще такой функционал реализует RTOS, но опять же я в этом новичок. Какие есть варианты?

Проц STM32F334


--------------------
нет повести печальнее на свете, чем повесть о запавшем ресете
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Hexel
сообщение Jun 8 2018, 19:59
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 13-03-12
Из: Украина
Пользователь №: 70 785



Вот как раз что меня беспокоит: в процессе формирования сообщения может сработать прерывание. можно в первых строках процедуры запомнить текущий индекс StackTop и сразу его инкрементировать. тогда в локальном контексте разрыв уже не повлияет на работу, т. к. место в логе уже будет зарезервировано, а всю необходимую информацию для сообщения передать аргументами, ее на самом деле не так много. Весь лог будет держаться в оперативе, а сохранение в EEP может происходить не прямо сразу.
А через ISR - это как? кажется, я все-таки плохо представляю механизм прерываний.


--------------------
нет повести печальнее на свете, чем повесть о запавшем ресете
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 9 2018, 06:03
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Hexel @ Jun 8 2018, 22:59) *
А через ISR - это как? кажется, я все-таки плохо представляю механизм прерываний.

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

Про SVC подробно написано в "Joseph Yiu. The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors" раздел "10.3 SVC exception".
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 06:20
Рейтинг@Mail.ru


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