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:
parent
373a335ec8
commit
a3e7abc2e2
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user