fix: 修复risc-v异常时,异常信息混乱且backtrace无法输出的问题
1.修复risc-v backtrace无法输出的问题 异常时未将fp传入,且backtrace校验不足,容易导致再次异常 2.优化task 输出信息格式 3.shell中task命令代码重复 4.OSBackTraceInit 拼写有误 Close #I4BPHX:riscv32_virt 异常时无法输出backtrace信息 Signed-off-by: zhushengle <zhushengle@huawei.com> Change-Id: I141d5e7808fc967d846f425422f5dcf2ac01d1d1
This commit is contained in:
@@ -30,116 +30,15 @@
|
||||
*/
|
||||
|
||||
#include "stdlib.h"
|
||||
#include "los_config.h"
|
||||
#include "los_task.h"
|
||||
#include "los_sem.h"
|
||||
#include "shcmd.h"
|
||||
#include "shell.h"
|
||||
|
||||
#define OS_INVALID_SEM_ID 0xFFFFFFFF
|
||||
#define OS_ALL_TASK_MASK 0xFFFFFFFF
|
||||
|
||||
LITE_OS_SEC_TEXT_MINOR STATIC VOID OsShellCmdTskInfoTitle(VOID)
|
||||
{
|
||||
PRINTK("Name TaskEntryAddr TID ");
|
||||
|
||||
PRINTK("Priority Status "
|
||||
#if (LOSCFG_TASK_MEM_USED == 1)
|
||||
"AllocSize "
|
||||
#endif
|
||||
"StackSize StackPoint TopOfStack");
|
||||
|
||||
PRINTK("\n");
|
||||
PRINTK("---- ------------- --- ");
|
||||
PRINTK("-------- -------- "
|
||||
#if (LOSCFG_TASK_MEM_USED == 1)
|
||||
"--------- "
|
||||
#endif
|
||||
"--------- ---------- ----------");
|
||||
PRINTK("\n");
|
||||
}
|
||||
|
||||
LITE_OS_SEC_TEXT_MINOR STATIC INLINE UINT32 OsGetSemID(const LosTaskCB *taskCB)
|
||||
{
|
||||
UINT32 semId = OS_INVALID_SEM_ID;
|
||||
|
||||
if (taskCB->taskSem != NULL) {
|
||||
semId = ((LosSemCB *)taskCB->taskSem)->semID;
|
||||
}
|
||||
|
||||
return semId;
|
||||
}
|
||||
|
||||
LITE_OS_SEC_TEXT_MINOR STATIC VOID OsShellCmdTskInfoData(const LosTaskCB *allTaskArray)
|
||||
{
|
||||
const LosTaskCB *taskCB = NULL;
|
||||
UINT32 loop;
|
||||
UINT32 semId;
|
||||
|
||||
#if (LOSCFG_TASK_MEM_USED == 1)
|
||||
UINT32 arraySize = sizeof(UINT32) * (LOSCFG_BASE_CORE_TSK_LIMIT + 1);
|
||||
UINT32 *getUsedSizeArray = (UINT32 *)LOS_MemAlloc(m_aucSysMem0, arraySize);
|
||||
if (getUsedSizeArray == NULL) {
|
||||
PRINTK("Memory is not enough to save task info!\n");
|
||||
return;
|
||||
}
|
||||
(VOID)memset_s(getUsedSizeArray, arraySize, 0, arraySize);
|
||||
OsTaskMemUsed(m_aucSysMem0, getUsedSizeArray, (LOSCFG_BASE_CORE_TSK_LIMIT + 1));
|
||||
#endif
|
||||
|
||||
for (loop = 0; loop < g_taskMaxNum; ++loop) {
|
||||
taskCB = allTaskArray + loop;
|
||||
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
||||
continue;
|
||||
}
|
||||
|
||||
semId = OsGetSemID(taskCB);
|
||||
|
||||
PRINTK("%-23s%-20p0x%-5x", taskCB->taskName, taskCB->taskEntry, taskCB->taskID);
|
||||
#if (LOSCFG_TASK_MEM_USED == 1)
|
||||
PRINTK("%-11u%-13s0x%-11x 0x%-11x 0x%-8x 0x%-10x ", taskCB->priority,
|
||||
OsConvertTskStatus(taskCB->taskStatus), getUsedSizeArray[loop], taskCB->stackSize,
|
||||
taskCB->stackPointer, taskCB->topOfStack, semId);
|
||||
#else
|
||||
PRINTK("%-11u%-13s0x%-11x 0x%-8x 0x%-10x ", taskCB->priority,
|
||||
OsConvertTskStatus(taskCB->taskStatus), taskCB->stackSize,
|
||||
taskCB->stackPointer, taskCB->topOfStack, semId);
|
||||
#endif
|
||||
PRINTK("\n");
|
||||
}
|
||||
#if (LOSCFG_TASK_MEM_USED == 1)
|
||||
(VOID)LOS_MemFree(m_aucSysMem0, getUsedSizeArray);
|
||||
#endif
|
||||
}
|
||||
#define OS_ALL_TASK_MASK 0xFFFFFFFF
|
||||
|
||||
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdTskInfoGet(UINT32 taskId)
|
||||
{
|
||||
BOOL backupFlag = TRUE;
|
||||
UINT32 size;
|
||||
LosTaskCB *tcbArray = NULL;
|
||||
INT32 ret;
|
||||
|
||||
if (taskId == OS_ALL_TASK_MASK) {
|
||||
size = g_taskMaxNum * sizeof(LosTaskCB);
|
||||
tcbArray = (LosTaskCB *)LOS_MemAlloc(m_aucSysMem0, size);
|
||||
if (tcbArray == NULL) {
|
||||
PRINTK("Memory is not enough to save task info!\n");
|
||||
tcbArray = g_taskCBArray;
|
||||
backupFlag = FALSE;
|
||||
}
|
||||
if (backupFlag == TRUE) {
|
||||
ret = memcpy_s(tcbArray, size, g_taskCBArray, size);
|
||||
if (ret != 0) {
|
||||
return LOS_NOK;
|
||||
}
|
||||
}
|
||||
|
||||
OsShellCmdTskInfoTitle();
|
||||
OsShellCmdTskInfoData(tcbArray);
|
||||
|
||||
if (backupFlag == TRUE) {
|
||||
(VOID)LOS_MemFree(m_aucSysMem0, tcbArray);
|
||||
}
|
||||
OsGetAllTskInfo();
|
||||
}
|
||||
|
||||
return LOS_OK;
|
||||
|
||||
Reference in New Issue
Block a user