Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-rtos by
Diff: rtos/Thread.cpp
- Revision:
- 84:143955ffb790
- Parent:
- 76:85a52b7ef44b
- Child:
- 85:ef0a22cdf839
--- a/rtos/Thread.cpp Tue Jun 16 07:45:29 2015 +0100 +++ b/rtos/Thread.cpp Wed Jun 17 10:00:10 2015 +0100 @@ -41,6 +41,11 @@ error("Error allocating the stack memory\n"); _dynamic_stack = true; } + + //Fill the stack with a magic word for maximum usage checking + for (int i = 0; i < (stack_size / sizeof(uint32_t)); i++) { + _thread_def.stack_pointer[i] = 0xE25A2EA5; + } #endif #endif _tid = osThreadCreate(&_thread_def, argument); @@ -76,6 +81,43 @@ #endif } +uint32_t Thread::stack_size() { +#ifndef __MBED_CMSIS_RTOS_CA9 + return _thread_def.tcb.priv_stack; +#else + return 0; +#endif +} + +uint32_t Thread::free_stack() { +#ifndef __MBED_CMSIS_RTOS_CA9 + uint32_t bottom = (uint32_t)_thread_def.tcb.stack; + return _thread_def.tcb.tsk_stack - bottom; +#else + return 0; +#endif +} + +uint32_t Thread::used_stack() { +#ifndef __MBED_CMSIS_RTOS_CA9 + uint32_t top = (uint32_t)_thread_def.tcb.stack + _thread_def.tcb.priv_stack; + return top - _thread_def.tcb.tsk_stack; +#else + return 0; +#endif +} + +uint32_t Thread::max_stack() { +#ifndef __MBED_CMSIS_RTOS_CA9 + uint32_t high_mark = 0; + while (_thread_def.tcb.stack[high_mark] == 0xE25A2EA5) + high_mark++; + return _thread_def.tcb.priv_stack - (high_mark * 4); +#else + return 0; +#endif +} + osEvent Thread::signal_wait(int32_t signals, uint32_t millisec) { return osSignalWait(signals, millisec); }