fix: CLI stack display (#6222)
This commit is contained in:
+12
-5
@@ -861,14 +861,21 @@ int cliTrace(const char ** argv)
|
||||
|
||||
int cliStackInfo(const char ** argv)
|
||||
{
|
||||
cliSerialPrint("[MAIN] %d available / %d bytes", mainStackAvailable()*4, stackSize()*4);
|
||||
cliSerialPrint("[MENUS] %d available / %d bytes", menusStack.available()*4, menusStack.size());
|
||||
cliSerialPrint("[MIXER] %d available / %d bytes", mixerStack.available()*4, mixerStack.size());
|
||||
cliSerialPrint("[MENUS] %d available / %d bytes",
|
||||
task_get_stack_usage(&menusTaskId) * 4,
|
||||
task_get_stack_size(&menusTaskId));
|
||||
cliSerialPrint("[MIXER] %d available / %d bytes",
|
||||
task_get_stack_usage(&mixerTaskId) * 4,
|
||||
task_get_stack_size(&mixerTaskId));
|
||||
#if defined(AUDIO)
|
||||
cliSerialPrint("[AUDIO] %d available / %d bytes", audioStack.available()*4, audioStack.size());
|
||||
cliSerialPrint("[AUDIO] %d available / %d bytes",
|
||||
task_get_stack_usage(&audioTaskId) * 4,
|
||||
task_get_stack_size(&audioTaskId));
|
||||
#endif
|
||||
#if defined(CLI)
|
||||
cliSerialPrint("[CLI] %d available / %d bytes", cliStack.available()*4, cliStack.size());
|
||||
cliSerialPrint("[CLI] %d available / %d bytes",
|
||||
task_get_stack_usage(&cliTaskId),
|
||||
task_get_stack_size(&cliTaskId));
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -197,8 +197,6 @@ void menuStatisticsDebug(event_t event)
|
||||
lcdDrawText(lcdLastRightPos+2, y+1, "[A]", SMLSIZE);
|
||||
lcdDrawNumber(lcdLastRightPos, y, task_get_stack_usage(&audioTaskId), LEFT);
|
||||
#endif
|
||||
lcdDrawText(lcdLastRightPos+2, y+1, "[I]", SMLSIZE);
|
||||
lcdDrawNumber(lcdLastRightPos, y, mainStackAvailable(), LEFT);
|
||||
y += FH;
|
||||
|
||||
#if defined(DEBUG_LATENCY)
|
||||
|
||||
@@ -38,7 +38,8 @@ void task_create(task_handle_t* h, task_func_t func, const char* name,
|
||||
|
||||
unsigned task_get_stack_usage(task_handle_t* h)
|
||||
{
|
||||
return uxTaskGetStackHighWaterMark(h->_rtos_handle);
|
||||
return (h->_stack_size - uxTaskGetStackHighWaterMark(h->_rtos_handle)) *
|
||||
sizeof(StackType_t);
|
||||
}
|
||||
|
||||
unsigned task_get_stack_size(task_handle_t* h)
|
||||
|
||||
@@ -36,11 +36,6 @@ extern "C++" {
|
||||
{
|
||||
}
|
||||
|
||||
static inline uint32_t mainStackAvailable()
|
||||
{
|
||||
return 500;
|
||||
}
|
||||
|
||||
#elif defined(FREE_RTOS)
|
||||
|
||||
#include <FreeRTOS/include/FreeRTOS.h>
|
||||
@@ -51,28 +46,6 @@ extern "C++" {
|
||||
vTaskStartScheduler();
|
||||
}
|
||||
|
||||
static inline uint32_t getStackAvailable(void * address, uint32_t size)
|
||||
{
|
||||
uint32_t * array = (uint32_t *)address;
|
||||
uint32_t i = 0;
|
||||
while (i < size && array[i] == 0x55555555) {
|
||||
i++;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
extern int _estack;
|
||||
extern int _main_stack_start;
|
||||
static inline uint32_t stackSize()
|
||||
{
|
||||
return ((unsigned char *)&_estack - (unsigned char *)&_main_stack_start) / 4;
|
||||
}
|
||||
|
||||
static inline uint32_t mainStackAvailable()
|
||||
{
|
||||
return getStackAvailable(&_main_stack_start, stackSize());
|
||||
}
|
||||
|
||||
#endif // RTOS type
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
Reference in New Issue
Block a user