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

 
 
> Запуск процесса на одном уровне прерывания, из разных уровней прерываний
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
Ответов
Serge V Iz
сообщение Jun 9 2018, 06:32
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 3-05-18
Пользователь №: 103 639



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

Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 9 2018, 06:49
Сообщение #3


Гуру
******

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



Цитата(Serge V Iz @ Jun 9 2018, 09:32) *
С той разницей, что "топорный" запрет прерываний не требует сбросов конвейера, переключений контекста и прочих всяких времязатратных вещей )

Работа с EEPROM довольно затратная по времени операция. Лишать систему прерываний на это время довольно опасно.
Я бы через SVC сделал доступ к очереди (быстрая часть), а в mainloop сделал бы вычитывание из очереди и запись в EEPROM.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 9 2018, 11:02
Сообщение #4


Гуру
******

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



Цитата(adnega @ Jun 9 2018, 09:49) *
Я бы через SVC сделал доступ к очереди (быстрая часть), а в mainloop сделал бы вычитывание из очереди и запись в EEPROM.

А SVC то тут зачем? wacko.gif
Если нужно чтобы сообщения, кидаемые разными отправителями (ISR разных приоритетов), не терялись и писались все, делаем очередь с атомарной записью. Ну или несколько очередей (на выбор). Пишем сообщение туда. Потом возбуждаем (программно) какое-нить прерывание (записью в соответствующий регистр NVIC), в ISR которого считываем сообщения из этой очереди (очередей) и пишем их куда надо. Считываем и пишем пока очереди не опустошатся. Опустошились - выходим из ISR.
Вместо ISR в данном алгоритме можно использовать задачу ОС с каким-нить объектом синхронизации ОС (мэйлбокс, семафор, etc.).
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 9 2018, 11:49
Сообщение #5


Гуру
******

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



Цитата(jcxz @ Jun 9 2018, 14:02) *
А SVC то тут зачем?

Для простоты реализации атомарности.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 9 2018, 12:48
Сообщение #6


Гуру
******

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



чем оно проще запрета прерываний?
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 9 2018, 15:07
Сообщение #7


Гуру
******

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



Цитата(jcxz @ Jun 9 2018, 15:48) *
чем оно проще запрета прерываний?

Тем, что в системе могут оставаться высокоприоритетные прерывания.
Разумеется в них доступа к этой очереди быть не должно.
Go to the top of the page
 
+Quote Post

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


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

 


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


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