更新时间: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