1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-01-17 05:32:45 +01:00

sys/pm: Fix behavior of fallback pm_off() implementation

- pm_off() should prevent other threads from getting executed after it is
  called, as it should turn off the MCU completely according to its doc
    - Previously, the fallback implementation would still allow other threads
      to continue working
    - Simply disabling IRQs and never enabling them again should make sure
      the MCU behaves like it would be completely off
- pm_off() should reduce the power consumption as much as possible
    - Previously, when IRQs came after the call to pm_set_lowest() in the
      fallback implementation of pm_off(), `while(1) {}` got executed at full
      power consumption
    - Just calling `pm_set(0);` in a loop while make sure that lowest power mode
      is restored if the MCU wakes up again.
    - The check if the lowest power mode is available is skipped, as no code
      gets executed afterwards anyway
This commit is contained in:
Marian Buschsieweke 2020-04-29 11:24:51 +02:00
parent 373a335ec8
commit a3e7abc2e2
No known key found for this signature in database
GPG Key ID: 61F64C6599B1539F

View File

@ -82,8 +82,9 @@ void pm_unblock(unsigned mode)
#ifndef PROVIDES_PM_LAYERED_OFF
void pm_off(void)
{
pm_blocker.val_u32 = 0;
pm_set_lowest();
while(1) {}
irq_disable();
while(1) {
pm_set(0);
}
}
#endif