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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Есть ли жизнь после WFI?, атомарность WFI
ViKo
сообщение Jun 4 2015, 12:31
Сообщение #31


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Obam @ Jun 4 2015, 15:22) *
Вспомнился старый анекдот: "…Не ебонит!!! Целлюлёид!!!…" sm.gif
PRIMASK

Описался. rolleyes.gif
Go to the top of the page
 
+Quote Post
Brain13
сообщение Jun 4 2015, 18:22
Сообщение #32


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 28-08-09
Пользователь №: 52 078



Цитата
Это говорит о том, что любое запрещенное прерывание может разбудить процессор?


Нет, запрещенное походу не разбудит...
http://infocenter.arm.com/help/index.jsp?t...a/BABGGICD.html
Цитата
To achieve this set the PRIMASK bit to 1 and the FAULTMASK bit to 0. If an interrupt arrives that is enabled and has a higher priority than current exception priority, the processor wakes up but does not execute the interrupt handler until the processor sets PRIMASK to zero.

То есть разбудит процессор только разрешенное(я так понимаю в NVIC) прерывание с более выским приоритетом.

Сообщение отредактировал Brain13 - Jun 4 2015, 18:23
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 5 2015, 04:38
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



А вот и последняя часть пазла

http://infocenter.arm.com/help/index.jsp?t...e/CJAFBCBB.html

Цитата
__disable_irq
Typically, this intrinsic disables IRQ interrupts by setting the I-bit in the CPSR. However, for M-profile it sets the exception mask register (PRIMASK).


и следовательно последовательность

__disable_irq
....
__swi() __WFI()
....
__enable_irq
правильная,


Цитата
the processor wakes up but does not execute the interrupt handler until the processor sets PRIMASK to zero.
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Jun 5 2015, 04:46
Сообщение #34


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(Golikov A. @ Jun 5 2015, 08:38) *
и следовательно последовательность

__disable_irq
....
__swi() или __wfi()
....
__enable_irq
правильная,

???
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 5 2015, 05:46
Сообщение #35


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(Golikov A. @ Jun 5 2015, 08:38) *
и следовательно последовательность

__disable_irq
....
__swi()
....
__enable_irq
правильная,


Не в масть! Даже команды такой нет. (Гусары, про UAL молчать!!!)
Тема про WFI!


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 5 2015, 10:58
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Да я о чем-то своем думал, естественно имел ввиду команду WFI, поправил сообщение, простите...

Гусары могут кричать, коль сопоставить 2 факта не в силах....

еще раз для гусар, а то вдруг опять че не поймут

вот так правильно

__disable_irq()
....
__WFI()
....
__enable_irq()
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 6 2015, 07:14
Сообщение #37


Гуру
******

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



Имхо - у ТС изначально неверно построен алгоритм. WFI не нужно смешивать с каким-либо полезным кодом.
Систему с WFI надо строить так, чтобы WFI выполнялось в фоновом процессе (возможно просто бесконечный цикл while (1) WFI();),
а вся полезная работа - в задачах или ISR с приоритетом выше фонового.
Тогда никаких запретов прерывания с WFI не нужно, WFI будет выполняться только когда нет ждущих прерываний.
Если ПО без ОС - вся работа в ISR-ах (разбитых по приоритетам), в фоновой задаче - функция main() заканчивающаяся while (1) WFI();.
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 Текстовая версия Сейчас: 5th July 2025 - 23:53
Рейтинг@Mail.ru


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