Embedded: відхід процессора до сну
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
Вітаю.
Маю Cortex-M4, там є команда WFI (wait for interrupt) котра вирубає проц допоки не прийде переривання.
І є у мене змінна, яка є індикатором того, що в черзі тасків є робота і спати не можна. Додати тасків в чергу можна в тому числі в перериванні, що я і використовую. Схоже, що в той момент, коли я йду спати відбувається таке:
1. перевірка змінної — можна спати
2. іду спати
а між цими двома кроками приходить переривання, яке модифікує змінну. виходить, що обробка цього таску відбуваєьться тільки тоді, коли приходить наступне переривання.
Можна на асмі написати так, що все робиться у дві команди (лоад в регістр, кондішнал сліп), але між двома командами все-одно може прийти переривання.
От якби була команда, яка включає переривання і іде в сліп одночасно, тоді можна було-б:
1. вимкнув переривання
2. перевірка змінної
3. суперкоманда
Але такої, схоже, немає.
Підкажіть, як така проблема вирішується в інших процесорах? Або чому вона не потребує вирішення / не повинна виникати?
14 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів