From 6881d3da46e228b052b4a95d3a9f8807b3b0ca6d Mon Sep 17 00:00:00 2001 From: wangchen <253227059@qq.com> Date: Tue, 7 Jun 2022 12:42:34 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=86=85=E5=AD=98=E6=B0=B4=E7=BA=BFshel?= =?UTF-8?q?l=E5=91=BD=E4=BB=A4=20=E3=80=90=E8=83=8C=E6=99=AF=E3=80=91?= =?UTF-8?q?=E5=86=85=E5=AD=98=E6=B0=B4=E7=BA=BFshell=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【修改方案】 1,添加shell命令, 通过LOS_MemInfoGet获取水线 2, 增加task命令显示任务的alloc情况 影响范围: 【影响】 对现有的产品编译不会有影响。 re #I5B6VT Signed-off-by: wangchen --- Kconfig | 5 ++++ components/shell/include/shcmd.h | 1 + components/shell/src/base/shcmd.c | 3 +++ components/shell/src/cmds/mempt_shellcmd.c | 29 ++++++++++++++++++++++ kernel/src/los_task.c | 18 ++++++++++++++ 5 files changed, 56 insertions(+) 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 ",