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

 
 
> STM32 - Атомарная операция в обработчике прерывания.
Alt.F4
сообщение Jan 7 2015, 22:20
Сообщение #1


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

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



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

Настроено две группы прерываний, в группе с наименьшим приоритетом есть прерывание, в котором надо осуществить атомарно одну операцию. Я так понимаю, надо перед ней поставить disable_irq и после нее enable_irq, но в AVR такое действие приводило к вложенным прерываниям.
Подскажите, пожалуйста, не сможет ли глобальное разрешение прерываний в обработчике привести к ситуации, что данное прерывание будет прервано другим из одной и той же группы приоритетов?
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SSerge
сообщение Jan 8 2015, 09:47
Сообщение #2


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Нет, не приведёт.
У AVR просто бит I выполнял две функции - (1) запрет/разрешение прерываний и (2) приоритет исполняемого кода.
У ARM эти функции разделены, disable_irq и enable_irq управляют только битом в регистре PRIMASK (запрет/разрешение), а текущий приоритет вычисляется довольно хитрым способом, описанном в ARMv7-M Architecture Reference Manual, на основе BASEPRI, PRIMASK, FAULTMASK и приоритетов всех активных обработчиков, т.е. тех, что начали исполняться, но были прерваны более приоритетным запросом.
Смотреть "Execution priority and priority boosting" в упомянутом мануале.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post

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


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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 05:41
Рейтинг@Mail.ru


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