Оглавление
1. Знакомство с режимом низкого энергопотребления.
1.1. Режим низкого энергопотребления STM32.
2.1.Как потреблять электроэнергию в режиме Tickless?
2.2. Идея дизайна бестикального режима
2.3.Как можно снизить энергопотребление, не влияя на работу системы?
3. Измените конфигурацию в режиме Tickless.
3.1. Определения макросов, связанные с конфигурацией
4. Используйте режим пониженного энергопотребления Tickless.
проиллюстрировать:
О содержании:
1) Следующий контент в основном представляет собой концептуальное понимание и поэтапный анализ.
2) Персонального примера кода пока нет, используется официальный пример кода FreeRTOS.
3) Если вы хотите перенести код для тестирования, поищите в другом месте. В следующем контенте нет личного образца кода для тестирования.
О других:
1) Операционная система: победа 10
2) Платформа: Кейл 5 мдк
3) Язык: язык c
4) Плата: серия STM32 пересажена на FreeRTOS
1. Знакомство с режимом низкого энергопотребления.
Многие приложения имеют строгие требования к энергопотреблению, например, носимые часы, физические сетевые продукты с низким энергопотреблением и т. д.; обычные микроконтроллеры имеют соответствующие режимы пониженного энергопотребления, а режим пониженного энергопотребления микроконтроллера можно использовать во время разработки на «голом железе».
FreeRTOS также предоставляет режим пониженного энергопотребления, называемый Tickless, для облегчения разработки приложений с помощью операционной системы FreeRTOS.
1.1. Режим низкого энергопотребления STM32.
Как показано на рисунке 1 ниже:
Рисунок 1
В основном используйте спящий режим, войдите в спящий режим, команда WFI: _WFI, команда WFE: _WFE, выйдите из спящего режима, любое прерывание или событие может активировать спящий режим;
2. Бестикальный режим
2.1.Как потреблять электроэнергию в режиме Tickless?
Суть заключается в реализации спящего режима вызовом инструкции WIF. При выполнении задач в режиме ожидания перейдите в спящий режим.
2.2. Идея дизайна бестикального режима
В эксперименте по статистике времени выполнения задач видно, что во время работы всей системы большую часть времени выполняются простаивающие задачи, как показано на рисунке 2 ниже:
фигура 2
2.3.Как можно снизить энергопотребление, не влияя на работу системы?
Во время выполнения задач ожидания позвольте MCU войти в соответствующий режим пониженного энергопотребления; когда другие задачи будут готовы к запуску, разбудите MCU для выхода из режима пониженного энергопотребления.
сложность:
1) Сколько времени занимает пробуждение после входа в режим пониженного энергопотребления? Как точно разбудить MCU до выполнения следующей задачи?
2)Любое прерывание может разбудить MCU.Частые прерывания тикающего таймера повлияют на эффект низкого энергопотребления (прерывание раз в 1мс)
решать:
1) Рассчитайте время блокировки задачи;
2) Изменить период прерывания тикающего таймера на время работы в режиме пониженного энергопотребления.После выхода из режима пониженного энергопотребления необходимо восполнить биение системных часов.
Хорошей новостью является то, что механизм режима Tickless с низким энергопотреблением FreeRTOS уже справился с этими трудностями и может использоваться путем прямого вызова соответствующих функций API.
3. Измените конфигурацию в режиме Tickless.
3.1. Определения макросов, связанные с конфигурацией
1) configUSE_TICKLESS_IDLE --> Это определение макроса используется для включения режима Tickless с низким энергопотреблением (1 включено, 0 не включено, другие значения необходимо реализовать функцию Tickless самостоятельно);
2) configEXPECTED_IDLE_TIME_BEFORE_SLEEP -->Это определение макроса используется для определения минимальной продолжительности перехода системы в соответствующий режим пониженного энергопотребления (не менее 2 системных тактов, то есть не менее 2 мс);
3) configPRE_SLEEP_PROCESSING (x) --> Это определение макроса используется для транзакций, выполняемых системой перед переходом на низкое энергопотребление, например: отключение периферийных часов перед переходом на низкое энергопотребление, чтобы еще больше снизить низкое энергопотребление;
4) configPOSR_SLEEP_PROCESSING (x) --> Это определение макроса используется для транзакций, выполняемых системой перед выходом из режима низкого энергопотребления, например: включение периферийных часов перед выходом из режима низкого энергопотребления для достижения нормальной работы системы.
Примечание. configPRE_SLEEP_PROCESSING (x) и configPOSR_SLEEP_PROCESSING (x) необходимо напрямую реализовать внутренние операции функции --> определить макрос для другой функции и реализовать его в другой функции.
4. Используйте режим пониженного энергопотребления Tickless.
4.1. Этапы использования
1) Настройте связанные определения макросов
2) Реализовать две функции: configPRE_SLEEP_PROCESSING(), configPOSR_SLEEP_PROCESSING() и добиться дальнейшего снижения энергопотребления в этих двух функциях (например, отключение внешних прерываний, отключение таймеров и т. д.).