LINUX.ORG.RU

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

 , , ,


1

3

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

while(1) {
  __WFI();
}

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

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

★★★★★

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

Прочитать документацию на железо.

cvv ★★★★★
()

Почитай про разные энергосберегающие режимы, их 3: sleep, stop и stanby. Инструкции wfi и wfe переводят контроллер в один из этих режимов в зависимости от конфигурации регистров управления энергопотреблением.

anonymous
()

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

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

Мне кажется, что дураки должны страдать бесплатно. Если им легче считать, что они читают вместо меня, а не просто бездарно гробят время - ну ок. Я ведь спрашивал про готовые решения, и проблемы велосипедистов мне не интересны.

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

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

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

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

Готовое решение у меня есть, просто в силу того что вы не прочитали документацию вы его не в состоянии понять.

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

Найди другую тему для своих побасёнок, здесь в них нужды нет.

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

Пусть меня заклюют и затопчут, но Vit тут прав. Человек пришел за советом, запутался говорит, читая документацию. Такое бывает. Я бы подсказал, если бы знал.

«У меня есть готовое решение, но ты его не поймешь» - чето не очень, не надо так :)

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

Делать с нуля, там где давно должны быть готовые решения - очевидный идиотизм. Дарю развернутую мысль. Бесплатно. За пожелания спасибо.

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

Готовое решение у меня есть..

А еще ты наверное в космос летал и женщиной у тебя уже наверное было?

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

ок, «читать документацию - бездарно гробить время» (с) Vit, так и запишем, успехов в разработке :P

Если ты сделал такой вывод, то это показатель твоего умственного развития и не более. Самое главное было добавить к твоему выводу "(с) Vit"...

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

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

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

Судя по формулировке вопроса человек не читал документацию. После прочтения документации возникают вопросы совершенно другого плана ...

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

Там вообще без оси - с RTOS бы такого вопроса не было.

Спасибо за ссылку. Позырыл для M7 - там тот же самый набор инструкций. Для M0 засыпание почему-то вообще не реализовано.

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

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

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

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