diff --git a/Kconfig b/Kconfig index d1116bea..0e14c0f5 100644 --- a/Kconfig +++ b/Kconfig @@ -597,6 +597,11 @@ config VM_OVERLAP_CHECK depends on DEBUG_VERSION && MEM_DEBUG help Answer Y to enable vm overlap check. + +config TASK_MEM_USED + bool "Enable show task mem used or not" + default n + depends on DEBUG_VERSION && MEM_DEBUG endmenu diff --git a/components/shell/include/shcmd.h b/components/shell/include/shcmd.h index 4c7cd9cc..3026fcad 100644 --- a/components/shell/include/shcmd.h +++ b/components/shell/include/shcmd.h @@ -94,6 +94,7 @@ extern INT32 VfsNormalizePath(const CHAR *directory, const CHAR *filename, CHAR extern INT32 OsShellCmdDate(INT32 argc, const CHAR **argv); extern INT32 OsShellCmdDumpTask(INT32 argc, const CHAR **argv); extern UINT32 OsShellCmdFree(INT32 argc, const CHAR **argv); +extern UINT32 OsShellCmdWaterLine(INT32 argc, const CHAR **argv); extern UINT32 lwip_ifconfig(INT32 argc, const CHAR **argv); extern UINT32 OsShellPing(INT32 argc, const CHAR **argv); extern INT32 OsShellCmdTouch(INT32 argc, const CHAR **argv); diff --git a/components/shell/src/base/shcmd.c b/components/shell/src/base/shcmd.c index 1bd0e48f..2f8668c7 100644 --- a/components/shell/src/base/shcmd.c +++ b/components/shell/src/base/shcmd.c @@ -51,6 +51,9 @@ CmdItem g_shellcmdAll[] = { {CMD_TYPE_STD, "date", XARGS, (CmdCallBackFunc)OsShellCmdDate}, {CMD_TYPE_EX, "task", 1, (CmdCallBackFunc)OsShellCmdDumpTask}, {CMD_TYPE_EX, "free", XARGS, (CmdCallBackFunc)OsShellCmdFree}, +#if (LOSCFG_MEM_WATERLINE == 1) + {CMD_TYPE_EX, "memusage", XARGS, (CmdCallBackFunc)OsShellCmdWaterLine}, +#endif #ifdef LWIP_SHELLCMD_ENABLE {CMD_TYPE_EX, "ifconfig", XARGS, (CmdCallBackFunc)lwip_ifconfig}, {CMD_TYPE_EX, "ping", XARGS, (CmdCallBackFunc)OsShellPing}, diff --git a/components/shell/src/cmds/mempt_shellcmd.c b/components/shell/src/cmds/mempt_shellcmd.c index 7e3f30e4..bc743f12 100644 --- a/components/shell/src/cmds/mempt_shellcmd.c +++ b/components/shell/src/cmds/mempt_shellcmd.c @@ -79,3 +79,32 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdFree(INT32 argc, const CHAR *argv[]) return 0; } +#if (LOSCFG_MEM_WATERLINE == 1) +LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdWaterLine(INT32 argc, const CHAR *argv[]) +{ + UINT32 ret; + LOS_MEM_POOL_STATUS poolStatus; + + if (argc > 1) { + PRINTK("\nUsage: memusage or memusage [-k/-m]\n"); + return OS_ERROR; + } + + if (LOS_MemInfoGet(m_aucSysMem0, &poolStatus) != LOS_OK) { + return OS_ERROR; + } + + if ((argc == 1) && (strcmp(argv[0], "-k") == 0)) { + PRINTK("Mem WaterLine: %-9u\n", MEM_SIZE_TO_KB(poolStatus.usageWaterLine)); + } else if ((argc == 1) && (strcmp(argv[0], "-m") == 0)) { + PRINTK("Mem WaterLine: %-9u\n", MEM_SIZE_TO_MB(poolStatus.usageWaterLine)); + } else if (argc == 0) { + PRINTK("Mem WaterLine: %-9u\n", poolStatus.usageWaterLine); + } else { + PRINTK("\nUsage: memusage or memusage [-k/-m]\n"); + return OS_ERROR; + } + + return 0; +} +#endif diff --git a/kernel/src/los_task.c b/kernel/src/los_task.c index c12515c4..4c19feee 100644 --- a/kernel/src/los_task.c +++ b/kernel/src/los_task.c @@ -307,18 +307,28 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsGetAllTskCpupInfo(CPUP_INFO_S **cpuLessOneSec, LITE_OS_SEC_TEXT_MINOR VOID OsPrintAllTskInfoHeader(VOID) { PRINTK("\r\n TID Priority Status StackSize WaterLine StackPoint TopOfStack EventMask SemID"); +#if (LOSCFG_TASK_MEM_USED == 1) + PRINTK(" AllocSize"); +#endif #if (LOSCFG_BASE_CORE_CPUP == 1) PRINTK(" CPUUSE CPUUSE10s CPUUSE1s "); #endif /* LOSCFG_BASE_CORE_CPUP */ PRINTK(" TaskEntry name\n"); PRINTK(" --- -------- -------- "); PRINTK("--------- --------- ---------- ---------- --------- ------ "); +#if (LOSCFG_TASK_MEM_USED == 1) + PRINTK("--------- "); +#endif #if (LOSCFG_BASE_CORE_CPUP == 1) PRINTK("------- --------- -------- "); #endif /* LOSCFG_BASE_CORE_CPUP */ PRINTK("---------- ----\n"); } +#if (LOSCFG_TASK_MEM_USED == 1) +STATIC UINT32 g_taskMemUsed[LOSCFG_BASE_CORE_TSK_LIMIT + 1]; +#endif + /***************************************************************************** Function : OsGetAllTskInfo Description : Get all task info. @@ -338,6 +348,11 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsGetAllTskInfo(VOID) CPUP_INFO_S *cpuOneSec = (CPUP_INFO_S *)NULL; #endif +#if (LOSCFG_TASK_MEM_USED == 1) + (VOID)memset_s(g_taskMemUsed, sizeof(UINT32) * g_taskMaxNum, 0, sizeof(UINT32) * g_taskMaxNum); + OsTaskMemUsed((VOID *)OS_SYS_MEM_ADDR, g_taskMemUsed, g_taskMaxNum); +#endif + #if (LOSCFG_BASE_CORE_CPUP == 1) if (OsGetAllTskCpupInfo(&cpuLessOneSec, &cpuTenSec, &cpuOneSec) != LOS_OK) { return OS_ERROR; @@ -357,6 +372,9 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsGetAllTskInfo(VOID) taskCB->taskID, taskCB->priority, OsConvertTskStatus(taskCB->taskStatus), taskCB->stackSize, OsGetTaskWaterLine(taskCB->taskID), (UINT32)(UINTPTR)taskCB->stackPointer, taskCB->topOfStack, taskCB->eventMask, semID); +#if (LOSCFG_TASK_MEM_USED == 1) + PRINTK("%#10x", g_taskMemUsed[loopNum]); +#endif #if (LOSCFG_BASE_CORE_CPUP == 1) PRINTK("%6u.%-2u%7u.%-2u%6u.%-2u ",