Merge pull request #8223 from c1728p9/deep_sleep_wakeup_fix

Improve RTOS behavior with deep sleep
pull/12790/head^2
Cruz Monrreal 2018-10-27 08:45:33 -05:00 committed by GitHub
commit 4798a91f2e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 0 deletions

View File

@ -93,6 +93,13 @@ uint32_t OS_Tick_GetInterval(void)
static void default_idle_hook(void)
{
uint32_t ticks_to_sleep = osKernelSuspend();
const bool block_deep_sleep = ticks_to_sleep <= MBED_CONF_TARGET_DEEP_SLEEP_LATENCY;
if (block_deep_sleep) {
sleep_manager_lock_deep_sleep();
} else {
ticks_to_sleep -= MBED_CONF_TARGET_DEEP_SLEEP_LATENCY;
}
os_timer->suspend(ticks_to_sleep);
bool event_pending = false;
@ -109,6 +116,11 @@ static void default_idle_hook(void)
// Ensure interrupts get a chance to fire
__ISB();
}
if (block_deep_sleep) {
sleep_manager_unlock_deep_sleep();
}
osKernelResume(os_timer->resume());
}

View File

@ -21,6 +21,10 @@
"help": "Default network interface type. Typical options: null, ETHERNET, WIFI, CELLULAR, MESH",
"value": null
},
"deep-sleep-latency": {
"help": "Time in ms required to go to and wake up from deep sleep (max 10)",
"value": 0
},
"boot-stack-size": {
"help": "Define the boot stack size in bytes. This value must be a multiple of 8",
"value": "0x1000"