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

 
 
> Есть ли жизнь после WFI?, атомарность WFI
Brain13
сообщение Jun 1 2015, 18:34
Сообщение #1


Участник
*

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



Здравствуйте!
Я тут задумался о такой потенциальной проблеме при использовании инструкции WFI: Предположим, что программа должна дождаться получения байта по UART, логичным был бы код
Код
while(!Uart.DataAvailable()) {
    __WFI();
}
// тут обработка данных

Но проблема в том что искомый байт может придти между Uart.DataAvailable() и __WFI(), вызовется обработчик прерывания, после которого вызовется __WFI() и МК больше никогда не проснется.

Вставка критических секций:
Код
__disable_irq();
// тут что-то
__enable_irq();
__WFI();

не спасет ситуацию, так как между __enable_irq(); и __WFI(); может проскочить нужное прерывание(а может не проскочить).

Поиски вывели меня на вот эту англоязычную тему: http://community.arm.com/message/8927 и доку http://infocenter.arm.com/help/index.jsp?t...a/BIHBFEIB.html
Но я так и не понял, что есть решение проблемы.
Так есть ли в Cortex-M гарантированный способ проснуться после WFI?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Jun 2 2015, 07:25
Сообщение #2


Гуру
******

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



Цитата
Соотетственно если байт придет перед инструкией WFI, то произойдет запрос прерывания, но обработчик не вызовется(прерывания запрещены), потом вызовется WFI, но он не усыпит прессор так как есть запрос на прерывание, потом исполнится enable_irq, после которого(в течение 0-2 инструкций) вызовется обработчик прерывания.


Цитата
WFI is a hint instruction that suspends execution until one of the following events occurs:
a non-masked interrupt occurs and is taken
an interrupt masked by PRIMASK becomes pending
a Debug Entry request.


то есть если вы замаскируете прерывание, и вызовите wfi, а размаскирование стоит после нее, то это кирпич?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Brain13   Есть ли жизнь после WFI?   Jun 1 2015, 18:34
- - Golikov A.   А почему вфи будет не после возврата из прерывания...   Jun 1 2015, 18:39
|- - Brain13   Цитата(Golikov A. @ Jun 1 2015, 21:39) А ...   Jun 1 2015, 18:54
|- - Brain13   Кажется, я нашел ответ: http://infocenter.arm.com/...   Jun 1 2015, 20:03
|- - zltigo   QUOTE (Brain13 @ Jun 1 2015, 23:03) Во-вт...   Jun 1 2015, 23:06
- - RabidRabbit   Таки в обработчике прерывания от UART можно взвест...   Jun 1 2015, 19:59
- - Obam   Я посмотрел ARM DDI 0403E.b - Architecture Referen...   Jun 2 2015, 07:06
- - sensor_ua   Предложу взглянуть на статью Use an MCU's low-...   Jun 2 2015, 08:50
- - Brain13   Цитата(zltigo @ Jun 2 2015, 02:06) Вы уж ...   Jun 3 2015, 17:18
|- - zltigo   QUOTE (Brain13 @ Jun 3 2015, 20:08) Я дел...   Jun 3 2015, 17:28
|- - Brain13   Цитата(zltigo @ Jun 3 2015, 20:28) Еще ра...   Jun 3 2015, 18:01
||- - zltigo   QUOTE (Brain13 @ Jun 3 2015, 21:01) Тема ...   Jun 4 2015, 00:40
||- - aaarrr   Цитата(zltigo @ Jun 4 2015, 03:40) К част...   Jun 4 2015, 01:05
|- - _4afc_   Цитата(zltigo @ Jun 3 2015, 21:28) Еще ра...   Jun 3 2015, 20:33
|- - aaarrr   Цитата(_4afc_ @ Jun 3 2015, 23:33) Неужто...   Jun 3 2015, 20:49
- - Golikov A.   ЦитатаВот именно, что не кирпич, ведь мы запрещаем...   Jun 3 2015, 19:42
- - ViKo   А в чем, собственно, проблема? Ставьте WFI после о...   Jun 4 2015, 04:00
- - Golikov A.   Проблема понятна, можно даже не брать UART и проче...   Jun 4 2015, 06:26
|- - Obam   Цитата(Golikov A. @ Jun 4 2015, 10:26) По...   Jun 4 2015, 08:07
|- - ViKo   Цитата(Golikov A. @ Jun 4 2015, 09:26) По...   Jun 4 2015, 08:12
- - Golikov A.   О чем собственно и есть эта тема. Как я понял __W...   Jun 4 2015, 09:30
|- - ViKo   Цитата(Golikov A. @ Jun 4 2015, 12:30) Ка...   Jun 4 2015, 10:12
|- - aaarrr   Цитата(ViKo @ Jun 4 2015, 13:12) Где тако...   Jun 4 2015, 10:14
|- - ViKo   Цитата(aaarrr @ Jun 4 2015, 13:14) См. No...   Jun 4 2015, 10:34
|- - aaarrr   Цитата(ViKo @ Jun 4 2015, 13:34) А что в ...   Jun 4 2015, 10:51
|- - ViKo   Цитата(aaarrr @ Jun 4 2015, 13:51) Действ...   Jun 4 2015, 11:45
|- - Obam   Цитата(ViKo @ Jun 4 2015, 15:45) …(устано...   Jun 4 2015, 12:22
|- - ViKo   Цитата(Obam @ Jun 4 2015, 15:22) Вспомнил...   Jun 4 2015, 12:31
- - aaarrr   Можно применить еще такой вариант: Код__SEV(...   Jun 4 2015, 09:50
- - Obam   Всё, согласен. Мир устоял.   Jun 4 2015, 09:57
- - Brain13   ЦитатаЭто говорит о том, что любое запрещенное пре...   Jun 4 2015, 18:22
- - Golikov A.   А вот и последняя часть пазла http://infocenter.a...   Jun 5 2015, 04:38
|- - DmitryM   Цитата(Golikov A. @ Jun 5 2015, 08:38) и ...   Jun 5 2015, 04:46
|- - Obam   Цитата(Golikov A. @ Jun 5 2015, 08:38) и ...   Jun 5 2015, 05:46
- - Golikov A.   Да я о чем-то своем думал, естественно имел ввиду ...   Jun 5 2015, 10:58
- - jcxz   Имхо - у ТС изначально неверно построен алгоритм. ...   Jun 6 2015, 07:14


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

 


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


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