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

 
 
> Есть ли жизнь после 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
Ответов
Brain13
сообщение Jun 4 2015, 18:22
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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

Сообщений в этой теме
- 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
- - Golikov A.   ЦитатаСоотетственно если байт придет перед инструк...   Jun 2 2015, 07:25
- - 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
- - 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 Текстовая версия Сейчас: 1st August 2025 - 20:52
Рейтинг@Mail.ru


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