Перейти к содержанию
    

Есть ли жизнь после WFI?

Вспомнился старый анекдот: "…Не ебонит!!! Целлюлёид!!!…" :)

PRIMASK

Описался. :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Нет, запрещенное походу не разбудит...

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

__disable_irq

....

__swi() или __wfi()

....

__enable_irq

правильная,

???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

__disable_irq

....

__swi()

....

__enable_irq

правильная,

 

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

Тема про WFI!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

 

__disable_irq()

....

__WFI()

....

__enable_irq()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Имхо - у ТС изначально неверно построен алгоритм. WFI не нужно смешивать с каким-либо полезным кодом.

Систему с WFI надо строить так, чтобы WFI выполнялось в фоновом процессе (возможно просто бесконечный цикл while (1) WFI();),

а вся полезная работа - в задачах или ISR с приоритетом выше фонового.

Тогда никаких запретов прерывания с WFI не нужно, WFI будет выполняться только когда нет ждущих прерываний.

Если ПО без ОС - вся работа в ISR-ах (разбитых по приоритетам), в фоновой задаче - функция main() заканчивающаяся while (1) WFI();.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...