Миро Самек "Использование режимов малого энергопотребления в простых программных архитектурах" (перевод)
Миро Самек
Использование режимов малого энергопотребления в простых программных архитектурах с приоритетной задачей и фоновым циклом
Перевод teap0t<caxapa.ru> v1.000 13-Dec-2012
В современном мире батарейных устройств важно правильно использовать имеющиеся в большинстве процессоров режимы малого потребления и сна. При этом следует учитывать, что современные крупнотиражные устройства на микроконтроллерах (MCU), такие как бытовая техника, торговые автоматы, системы управления двигателями или электронные игрушки, выполнены в виде систем с приоритетной и фоновой задачами.
Программное обеспечение подобных систем состоит из двух основных частей: "приоритетной" - программ-обработчиков прерываний (ISR), незамедлительно обслуживающих внешние асинхронные события, и "фоновой" - бесконечного цикла, который тратит оставшиеся такты процессора на менее срочную работу.
Обычно приоритетные задачи общаются с фоновым циклом через общую область памяти. Фоновый цикл защищает её от повреждения через запрет прерываний на время доступа к общим переменным.
Перед тем, как задействовать режим низкого потребления контроллера, фоновый цикл должен убедиться, что все внешние и внутренние события обработаны и процессор можно остановить до появления следующего прерывания, которое выведет его из режима сна. Такая ситуация называется состоянием простоя (idle) и показана на рисунке 1.
Рисунок 1. Система с фоновой и приоритетными задачами и возможностью перехода в режим малого потребления |
Выявление состояния простоя подразумевает проверку общих с приоритетным процессом (ISR) переменных, перед началом которой фоновый цикл должен запретить прерывания. Более того, состояние простоя остаётся таковым до тех только пор, пока прерывания запрещены. Если прерывания будут разрешены после выполнения фоновым процессом всей работы, но до того, как он переключит аппаратуру в состояние низкого потребления, внешнее событие может перехватить управление и подготовить новую порцию данных, отменяя, тем самым, состояние простоя. [* оно может возникнуть в тот момент, когда прерывания запрещены, и ждать до момента отмены блокировки]
Упрощая ситуацию, можно сказать, что фоновый процесс завершает свою работу сразу после прерывания и переходит в состояние низкого потребления, когда у процессора ещё полно неотложной работы. Контроллер засыпает на неопределённое время до момента пробуждения от следующего прерывания [* и необязательно от того же источника]. Таким образом, разрешение прерываний до начала перехода в режим низкого потребления открывает временное окно для логических гонок между внешними событиями и переключением режима питания.
Переход в режим сна с запрещёнными прерываниями не позволит разбудить систему, так как сделать это можно только по прерыванию. Работая в режиме с приоритетной/фоновой задачами, контроллер должен разрешать переход в состояние сна одновременно с разрешением прерываний, чтобы не создавать условий для логических гонок.
Многие процессоры позволяют такой "атомарный" переход в режим сна. У других есть многоуровневая система запрещения прерываний и они могут перейти в режим малого потребления с запретом прерываний на одном из уровней. У третьих нет никаких возможностей перехода в режим сна с разрешением прерываний и они требуют иного подхода.
HC08
HC08 - семейство 8-разрядных контроллеров фирмы Freescale Semiconductors. Система команд HC(S)08 содержит две специальные инструкции - "WAIT" и "STOP" - для перехода в режим ожидания с малым потреблением и останова соответственно [1]. В документации на HC08 прямо говорится [* в разделе 7.5 "Low-Power Modes"], что обе инструкции разрешают прерывания как побочный эффект перехода в режим сна. Очевидно, разработчики HC08 предвидели необходимость перехода в режим малого потребления при запрещённых прерываниях [* с их последующим автоматическим разрешением]. Листинг 1 демонстрирует код фонового цикла с атомарным переходом в режим "WAIT" для компилятора CodeWarrior для HC08.
Листинг 1. Код для компилятора CodeWarrior для HC08 показывает фоновый цикл с атоммарным переходом в режим ожидания (WAIT) |
|
- блог пользователя teap0t
- 48211 просмотров
Новые записи в блогах
- Устранение дребезга контактов на основе вертикальных счетчиков
- Диагностика Imprecise Bus Faults в микроконтроллерах Cortex-M3/M4/M4F
- Self-powered камера
- Фоновый модулятор: беспроводная связь из ничего (перевод)
- Texas Instruments Analog Applications Journal SLYT612 "Снижение искажений в аналоговых КМОП ключах" (перевод)
- USB MSD. Часть 6. Команды SCSI (перевод)
- USB MSD. Часть 3. USB класс накопителей данных (перевод)
- Texas Instruments Application Report SBAA042 "Кодовые схемы, используемые в аналогово-цифровых преобразователях" (перевод)
- 10 принципов правильного интерфейса
- Релиз SDK на русский микропроцессор КРОЛИК
Recent comments
5 дней 2 часа назад
5 дней 8 часов назад
5 дней 23 часа назад
5 дней 23 часа назад
1 неделя 15 минут назад
1 неделя 2 часа назад
1 неделя 4 часа назад
1 неделя 14 часов назад
1 неделя 1 день назад
1 неделя 4 дня назад