Revision e5742249
core/src/aos_system.c | ||
---|---|---|
540 | 540 |
#if (AMIROOS_CFG_DBG == true) |
541 | 541 |
chprintf(stream, "\tthread stack size: %u bytes\n", aosThdGetStacksize(aos.shell.thread)); |
542 | 542 |
#if (CH_DBG_FILL_THREADS == TRUE) |
543 |
chprintf(stream, "\tstack peak utilization: %u bytes (%.2f%%)\n", aosThdGetStackPeakUtilization(aos.shell.thread), (double)((float)(aosThdGetStackPeakUtilization(aos.shell.thread)) / (float)(aosThdGetStacksize(aos.shell.thread)) * 100.0f)); |
|
543 |
{ |
|
544 |
const size_t utilization = aosThdGetStackPeakUtilization(aos.shell.thread); |
|
545 |
chprintf(stream, "\tstack peak utilization: %u bytes (%.2f%%)\n", utilization, (double)((float)utilization / (float)(aosThdGetStacksize(aos.shell.thread)) * 100.0f)); |
|
546 |
} |
|
544 | 547 |
#endif /* (CH_DBG_FILL_THREADS == TRUE) */ |
545 | 548 |
#endif /* (AMIROOS_CFG_DBG == true) */ |
546 | 549 |
_printSystemInfoSeparator(stream, '=', SYSTEM_INFO_WIDTH); |
core/src/aos_thread.c | ||
---|---|---|
91 | 91 |
{ |
92 | 92 |
aosDbgCheck(thread != NULL); |
93 | 93 |
|
94 |
size_t util; |
|
95 |
uint8_t* ptr = (uint8_t*)thread->wabase; |
|
96 |
|
|
97 |
while (*ptr == CH_DBG_STACK_FILL_VALUE && ptr < (uint8_t*)thread->wabase + aosThdGetStacksize(thread)) { |
|
98 |
++ptr; |
|
94 |
// iterator through the stack |
|
95 |
// note: since the stack is filled from top to bottom, the loop searches for the first irregular byte from the bottom (stack end). |
|
96 |
for (uint8_t* ptr = (uint8_t*)thread->wabase; ptr < (uint8_t*)thread->wabase + aosThdGetStacksize(thread); ++ptr) { |
|
97 |
if (*ptr != CH_DBG_STACK_FILL_VALUE) { |
|
98 |
return aosThdGetStacksize(thread) - (size_t)(--ptr - (uint8_t*)thread->wabase); |
|
99 |
} |
|
99 | 100 |
} |
100 |
util = aosThdGetStacksize(thread) - (ptr - (uint8_t*)thread->wabase); |
|
101 | 101 |
|
102 |
return util;
|
|
102 |
return 0;
|
|
103 | 103 |
} |
104 | 104 |
#endif /* (AMIROOS_CFG_DBG == true) && (CH_DBG_FILL_THREADS == TRUE) */ |
105 | 105 |
|
Also available in: Unified diff