更新时间:2021-07-08 GMT+08:00
编程实例
实例描述
本实例实现如下功能:
- 创建一个用于Trace测试的任务。
- 设置事件掩码。
- 启动trace。
- 停止trace。
- 格式化输出trace数据。
编程实例
前提条件:在menuconfig菜单中完成Trace模块的配置。
代码实现如下:
#include "los_trace.h" UINT32 g_traceTestTaskId; VOID Example_Trace(VOID) { UINT32 ret; LOS_TaskDelay(10); /* 开启trace */ ret = LOS_TraceStart(); if (ret != LOS_OK) { dprintf("trace start error\n"); return; } /* 触发任务切换的事件 */ LOS_TaskDelay(1); LOS_TaskDelay(1); LOS_TaskDelay(1); /* 停止trace */ LOS_TraceStop(); LOS_TraceRecordDump(FALSE); } UINT32 Example_Trace_test(VOID) { UINT32 ret; TSK_INIT_PARAM_S traceTestTask; /* 创建用于trace测试的任务 */ memset(&traceTestTask, 0, sizeof(TSK_INIT_PARAM_S)); traceTestTask.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_Trace; traceTestTask.pcName = "TestTraceTsk"; /* 测试任务名称 */ traceTestTask.uwStackSize = 0x800; traceTestTask.usTaskPrio = 5; traceTestTask.uwResved = LOS_TASK_STATUS_DETACHED; ret = LOS_TaskCreate(&g_traceTestTaskId, &traceTestTask); if(ret != LOS_OK){ dprintf("TraceTestTask create failed .\n"); return LOS_NOK; } /* 系统默认情况下已启动trace, 因此可先关闭trace后清除缓存区后,再重启trace */ LOS_TraceStop(); LOS_TraceReset(); /* 开启任务模块事件记录 */ LOS_TraceEventMaskSet(TRACE_TASK_FLAG); return LOS_OK; }
结果验证
编译运行得到的结果为:
*******TraceInfo begin******* clockFreq = 50000000 CurObjIndex = 9 Index TaskID TaskPrio TaskName 0 0x10000 0 Swt_Task 1 0x10001 31 IdleCore000 2 0x10002 1 system_wq 3 0x10003 10 app_Task 4 0x10004 5 TestTraceTsk 5 0x10005 0 Swt_Task 6 0x10006 31 IdleCore000 7 0x10007 10 SendToSer 8 0x10008 5 tcpip_thread 9 0x0 0 CurEvtIndex = 7 Index Time(cycles) EventType CurTask Identity params 0 0x78142f2 0x45 0x10004 0x10006 0x5 0x20 0x1f 1 0x788b982 0x45 0x10006 0x10004 0x1f 0x4 0x5 2 0x788ba2e 0x45 0x10004 0x10006 0x5 0x20 0x1f 3 0x7905aa7 0x45 0x10003 0x10004 0xa 0x4 0x5 4 0x7905b82 0x45 0x10004 0x10003 0x5 0x20 0xa 5 0x7908402 0x45 0x10006 0x10008 0x1f 0x4 0x5 6 0x79084a9 0x45 0x10003 0x10004 0xa 0x4 0x5 *******TraceInfo end*******
两段数据分别为任务信息和事件信息。
完整实例代码
父主题: Trace