LINUX.ORG.RU

Как правильно ждать прерываний в idle-цикле?

 , , ,


1

3

Есть прошивка для эмбедов, в которой все работает по прерываниям. Чтобы процессор меньше жрал, хочется в конце main() воткнуть что-то подобное:

while(1) {
  __WFI();
}

Но вроде в мануалах еще пишут про всякие DSB и т.п. для корректного завершения записи в память. А в линуксовом ядре навороты для совсем сложных случаев, которые сходу понять проблемматично.

Есть ли какой-то относительно простой и стандартный способ сделать бесконечный цикл ожидания прерываний, для ARM-одноядерников? Запутался уже.

★★★★★

Единственное, что о чём тебе нужно позаботиться, вызывая WFI или WFE - так это о том, чтобы это прерывание или событие произошло. Все операции работы с рамой, флешью и прочей периферией технически безопасны, это одна из основных фишек кортексов. Позаботься, только над логикой своих процессов, чтобы свои вещи и процессы не отвалились за это время.

SL_RU ★★★★
()
Ответ на: комментарий от SL_RU

Хм. Не знал, что это именно фишка кортексов. Сенькс. В доке упоминалось что безопасно на M0-M3, но ничего про M4 и выше. Интересно стало.

С логикой вроде все ок.

Vit ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Это особенности реализации конкретной модели. Почитать можно TRM конкретной модели. Проблема в основном в том что народ пишет код на основе этих TRM а не ARM ARM и потом уделяется отчего код работает не так как ожидалось при запуске на других (более продвинутых) поколениях ядер.

anonymous
()
Ответ на: комментарий от anonymous

Я по этому вопросу прямо противоположного мнения, так как нередко IP-ядра у вендоров весьма глубоко пропатчены.

Документация от ARM может быть просто не адекватна.

cvv ★★★★★
()
Последнее исправление: cvv (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.