更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_trace.c 文件参考

http://weharmonyos.com/openharmony/zh-cn/device-dev/kernel/kernel-small-debug-trace.html 更多...

浏览源代码.

函数

LITE_OS_SEC_BSS SPIN_LOCK_INIT (g_traceSpin)
 
STATIC_INLINE BOOL OsTraceHwiFilter (UINT32 hwiNum)
 
STATIC VOID OsTraceSetFrame (TraceEventFrame *frame, UINT32 eventType, UINTPTR identity, const UINTPTR *params, UINT16 paramCount)
 
VOID OsTraceSetObj (ObjData *obj, const LosTaskCB *tcb)
 
VOID OsTraceHook (UINT32 eventType, UINTPTR identity, const UINTPTR *params, UINT16 paramCount)
 OsTraceHook
事件统一处理函数 更多...
 
BOOL OsTraceIsEnable (VOID)
 
STATIC VOID OsTraceHookInstall (VOID)
 初始化事件处理函数 更多...
 
STATIC BOOL OsTraceCmdIsValid (const TraceClientCmd *msg)
 
STATIC VOID OsTraceCmdHandle (const TraceClientCmd *msg)
 trace任务的入口函数,接收串口数据 更多...
 
VOID TraceAgent (VOID)
 
STATIC UINT32 OsCreateTraceAgentTask (VOID)
 OsCreateTraceAgentTask 创建trace任务 更多...
 
STATIC UINT32 OsTraceInit (VOID)
 跟踪模块初始化 更多...
 
UINT32 LOS_TraceStart (VOID)
 启动Trace 更多...
 
VOID LOS_TraceStop (VOID)
 停止Trace(跟踪) 更多...
 
VOID LOS_TraceEventMaskSet (UINT32 mask)
 设置事件掩码,仅记录某些模块的事件 更多...
 
VOID LOS_TraceRecordDump (BOOL toClient)
 输出Trace缓冲区数据 更多...
 
OfflineHeadLOS_TraceRecordGet (VOID)
 获取Trace缓冲区的首地址 更多...
 
VOID LOS_TraceReset (VOID)
 清除Trace缓冲区中的事件 更多...
 
VOID LOS_TraceHwiFilterHookReg (TRACE_HWI_FILTER_HOOK hook)
 注册过滤特定中断号事件的钩子函数 更多...
 
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdTraceSetMask (INT32 argc, const CHAR **argv)
 通过shell命令 设置事件掩码,仅记录某些模块的事件 更多...
 
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdTraceDump (INT32 argc, const CHAR **argv)
 
 SHELLCMD_ENTRY (tracestart_shellcmd, CMD_TYPE_EX, "trace_start", 0,(CmdCallBackFunc) LOS_TraceStart)
 
 SHELLCMD_ENTRY (tracestop_shellcmd, CMD_TYPE_EX, "trace_stop", 0,(CmdCallBackFunc) LOS_TraceStop)
 
 SHELLCMD_ENTRY (tracesetmask_shellcmd, CMD_TYPE_EX, "trace_mask", 1,(CmdCallBackFunc) OsShellCmdTraceSetMask)
 
 SHELLCMD_ENTRY (tracereset_shellcmd, CMD_TYPE_EX, "trace_reset", 0,(CmdCallBackFunc) LOS_TraceReset)
 
 SHELLCMD_ENTRY (tracedump_shellcmd, CMD_TYPE_EX, "trace_dump", 1,(CmdCallBackFunc) OsShellCmdTraceDump)
 
 LOS_MODULE_INIT (OsTraceInit, LOS_INIT_LEVEL_KMOD_EXTENDED)
 

变量

LITE_OS_SEC_BSS STATIC UINT32 g_traceEventCount
 
LITE_OS_SEC_BSS STATIC enum TraceState g_traceState = TRACE_UNINIT
 
LITE_OS_SEC_DATA_INIT STATIC volatile BOOL g_enableTrace = FALSE
 trace开关 更多...
 
LITE_OS_SEC_BSS STATIC UINT32 g_traceMask = TRACE_DEFAULT_MASK
 全局变量设置事件掩码,仅记录某些模块的事件 更多...
 
TRACE_EVENT_HOOK g_traceEventHook = NULL
 事件钩子函数 更多...
 
TRACE_DUMP_HOOK g_traceDumpHook = NULL
 输出缓冲区数据 更多...
 
LITE_OS_SEC_BSS STATIC UINT32 g_traceTaskId
 
LITE_OS_SEC_BSS STATIC TRACE_HWI_FILTER_HOOK g_traceHwiFilterHook = NULL
 用于跟踪硬中断过滤的钩子函数 更多...
 

详细描述

http://weharmonyos.com/openharmony/zh-cn/device-dev/kernel/kernel-small-debug-trace.html

 基本概念
    Trace调测旨在帮助开发者获取内核的运行流程,各个模块、任务的执行顺序,从而可以辅助开发者定位一些时序问题
    或者了解内核的代码运行过程。
 相关宏
    LOSCFG_KERNEL_TRACE             Trace模块的裁剪开关                YES/NO
    LOSCFG_RECORDER_MODE_OFFLINE    Trace工作模式为离线模式              YES/NO
    LOSCFG_RECORDER_MODE_ONLINE     Trace工作模式为在线模式              YES/NO
    LOSCFG_TRACE_CLIENT_INTERACT    使能与Trace IDE (dev tools)的交互,包括数据可视化和流程控制    YES/NO
    LOSCFG_TRACE_FRAME_CORE_MSG     记录CPUID、中断状态、锁任务状态  YES/NO
    LOSCFG_TRACE_FRAME_EVENT_COUNT  记录事件的次序编号                   YES/NO
    LOSCFG_TRACE_FRAME_MAX_PARAMS   配置记录事件的最大参数个数               INT
    LOSCFG_TRACE_BUFFER_SIZE        配置Trace的缓冲区大小               INT
 运行机制
    内核提供一套Hook框架,将Hook点预埋在各个模块的主要流程中, 在内核启动初期完成Trace功能的初始化,
    并注册Trace的处理函数到Hook中。

    当系统触发到一个Hook点时,Trace模块会对输入信息进行封装,添加Trace帧头信息,包含事件类型、
    运行的cpuid、运行的任务id、运行的相对时间戳等信息;

    Trace提供2种工作模式,离线模式和在线模式。
        在线模式需要配合IDE使用,实时将trace frame记录发送给IDE,IDE端进行解析并可视化展示。
        离线模式会将trace frame记录到预先申请好的循环buffer中。如果循环buffer记录的frame过多则可能出现翻转,
        会覆盖之前的记录,故保持记录的信息始终是最新的信息。Trace循环buffer的数据可以通过shell命令导出进行详细分析,
        导出信息已按照时间戳信息完成排序。
版本
作者
weharmonyos.com | 鸿蒙研究站 | 每天死磕一点点
日期
2021-11-20

在文件 los_trace.c 中定义.

函数说明

◆ LOS_MODULE_INIT()

LOS_MODULE_INIT ( OsTraceInit  ,
LOS_INIT_LEVEL_KMOD_EXTENDED   
)

◆ OsCreateTraceAgentTask()

STATIC UINT32 OsCreateTraceAgentTask ( VOID  )

OsCreateTraceAgentTask 创建trace任务

返回
参见

在文件 los_trace.c281 行定义.

282{
283 UINT32 ret;
284 TSK_INIT_PARAM_S taskInitParam;
285
286 (VOID)memset_s((VOID *)(&taskInitParam), sizeof(TSK_INIT_PARAM_S), 0, sizeof(TSK_INIT_PARAM_S));
287 taskInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)TraceAgent; //任务入口函数
288 taskInitParam.usTaskPrio = LOSCFG_TRACE_TASK_PRIORITY; //任务优先级 2
289 taskInitParam.pcName = "TraceAgent"; //任务名称
290 taskInitParam.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE; //内核栈大小 16K
291#ifdef LOSCFG_KERNEL_SMP
292 taskInitParam.usCpuAffiMask = CPUID_TO_AFFI_MASK(ArchCurrCpuid());//指定为当前CPU执行
293#endif
294 ret = LOS_TaskCreate(&g_traceTaskId, &taskInitParam);//创建任务并产生调度
295 return ret;
296}
struct tagTskInitParam TSK_INIT_PARAM_S
LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskCreate(UINT32 *taskID, TSK_INIT_PARAM_S *initParam)
创建任务,并使该任务进入ready状态,如果就绪队列中没有更高优先级的任务,则运行该任务
Definition: los_task.c:718
VOID *(* TSK_ENTRY_FUNC)(UINTPTR param1, UINTPTR param2, UINTPTR param3, UINTPTR param4)
Define the type of a task entrance function.
Definition: los_task.h:480
STATIC INLINE UINT32 ArchCurrCpuid(VOID)
Definition: los_hw_cpu.h:168
LITE_OS_SEC_BSS STATIC UINT32 g_traceTaskId
Definition: los_trace.c:95
VOID TraceAgent(VOID)
Definition: los_trace.c:259
unsigned int UINT32
Definition: los_typedef.h:57
UINT16 usTaskPrio
Definition: los_task.h:505
UINT16 usCpuAffiMask
Definition: los_task.h:511
UINT32 uwStackSize
Definition: los_task.h:508
CHAR * pcName
Definition: los_task.h:509
TSK_ENTRY_FUNC pfnTaskEntry
Definition: los_task.h:504
函数调用图:
这是这个函数的调用关系图:

◆ OsShellCmdTraceDump()

LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdTraceDump ( INT32  argc,
const CHAR **  argv 
)

在文件 los_trace.c457 行定义.

458{
459 BOOL toClient;
460 CHAR *endPtr = NULL;
461
462 if (argc >= 2) { /* 2:Just as number of parameters */
463 PRINTK("\nUsage: trace_dump or trace_dump [1/0]\n");
464 return OS_ERROR;
465 }
466
467 if (argc == 0) {
468 toClient = FALSE;
469 } else {
470 toClient = strtoul(argv[0], &endPtr, 0) != 0 ? TRUE : FALSE;
471 }
472 LOS_TraceRecordDump(toClient);
473 return LOS_OK;
474}
VOID LOS_TraceRecordDump(BOOL toClient)
输出Trace缓冲区数据
Definition: los_trace.c:403
char CHAR
Definition: los_typedef.h:63
size_t BOOL
Definition: los_typedef.h:88
函数调用图:

◆ OsShellCmdTraceSetMask()

LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdTraceSetMask ( INT32  argc,
const CHAR **  argv 
)

通过shell命令 设置事件掩码,仅记录某些模块的事件

在文件 los_trace.c438 行定义.

439{
440 size_t mask;
441 CHAR *endPtr = NULL;
442
443 if (argc >= 2) { /* 2:Just as number of parameters */
444 PRINTK("\nUsage: trace_mask or trace_mask ID\n");
445 return OS_ERROR;
446 }
447
448 if (argc == 0) {
449 mask = TRACE_DEFAULT_MASK;
450 } else {
451 mask = strtoul(argv[0], &endPtr, 0);
452 }
454 return LOS_OK;
455}
VOID LOS_TraceEventMaskSet(UINT32 mask)
设置事件掩码,仅记录某些模块的事件
Definition: los_trace.c:398
函数调用图:

◆ OsTraceCmdHandle()

STATIC VOID OsTraceCmdHandle ( const TraceClientCmd msg)

trace任务的入口函数,接收串口数据

在文件 los_trace.c234 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ OsTraceCmdIsValid()

STATIC BOOL OsTraceCmdIsValid ( const TraceClientCmd msg)

在文件 los_trace.c229 行定义.

230{
231 return ((msg->end == TRACE_CMD_END_CHAR) && (msg->cmd < TRACE_CMD_MAX_CODE));
232}
@ TRACE_CMD_MAX_CODE
Definition: los_trace_pri.h:78
这是这个函数的调用关系图:

◆ OsTraceHook()

VOID OsTraceHook ( UINT32  eventType,
UINTPTR  identity,
const UINTPTR params,
UINT16  paramCount 
)

OsTraceHook
事件统一处理函数

参数
eventType
identity
paramCount
params
返回
参见

在文件 los_trace.c188 行定义.

189{
190 TraceEventFrame frame;//离线和在线模式下, trace数据的保存和传送以帧为单位
191 if ((eventType == TASK_CREATE) || (eventType == TASK_PRIOSET)) {//创建任务和设置任务优先级
192 OsTraceObjAdd(eventType, identity); /* handle important obj info, these can not be filtered */
193 }
194
195 if ((g_enableTrace == TRUE) && (eventType & g_traceMask)) {//使能跟踪模块且事件未屏蔽
196 UINTPTR id = identity;
197 if (TRACE_GET_MODE_FLAG(eventType) == TRACE_HWI_FLAG) {//关于硬中断的事件
198 if (OsTraceHwiFilter(identity)) {//检查中断号是否过滤掉了,注意:中断控制器本身是可以屏蔽中断号的
199 return;
200 }
201 } else if (TRACE_GET_MODE_FLAG(eventType) == TRACE_TASK_FLAG) {//关于任务的事件
202 id = OsTraceGetMaskTid(identity);//获取任务ID
203 } else if (eventType == MEM_INFO_REQ) {//内存信息事件
204 LOS_MEM_POOL_STATUS status;
205 LOS_MemInfoGet((VOID *)identity, &status);//获取内存各项信息
206 LOS_TRACE(MEM_INFO, identity, status.totalUsedSize, status.totalFreeSize);//打印信息
207 return;
208 }
209
210 OsTraceSetFrame(&frame, eventType, id, params, paramCount);//创建帧数据
211 OsTraceWriteOrSendEvent(&frame);//保存(离线模式下)或者发送(在线模式下)帧数据
212 }
213}
UINT32 LOS_MemInfoGet(VOID *pool, LOS_MEM_POOL_STATUS *poolStatus)
LOS_MemInfoGet 获取指定内存池的内存结构信息,包括空闲内存大小、已使用内存大小、空闲内存块数量、已使用的内存块数量、最大的空闲内存块大小
Definition: los_memory.c:1965
@ TRACE_HWI_FLAG
跟踪硬中断
Definition: los_trace.h:123
@ TRACE_TASK_FLAG
跟踪任务/线程
Definition: los_trace.h:124
@ MEM_INFO
Definition: los_trace.h:190
@ TASK_PRIOSET
Definition: los_trace.h:170
@ TASK_CREATE
Definition: los_trace.h:169
@ MEM_INFO_REQ
Definition: los_trace.h:189
STATIC VOID OsTraceSetFrame(TraceEventFrame *frame, UINT32 eventType, UINTPTR identity, const UINTPTR *params, UINT16 paramCount)
Definition: los_trace.c:119
LITE_OS_SEC_DATA_INIT STATIC volatile BOOL g_enableTrace
trace开关
Definition: los_trace.c:88
STATIC_INLINE BOOL OsTraceHwiFilter(UINT32 hwiNum)
Definition: los_trace.c:107
LITE_OS_SEC_BSS STATIC UINT32 g_traceMask
全局变量设置事件掩码,仅记录某些模块的事件
Definition: los_trace.c:89
UINT32 OsTraceGetMaskTid(UINT32 taskId)
Definition: trace_offline.c:58
VOID OsTraceObjAdd(UINT32 eventType, UINT32 taskId)
添加一个任务
VOID OsTraceWriteOrSendEvent(const TraceEventFrame *frame)
离线模式下保存帧数据 @note_thinking 此处未封装好,会懵逼,文件名中体现了对离线模式的保存或对在线模式的发送这样真的好吗? .
unsigned long UINTPTR
Definition: los_typedef.h:68
函数调用图:
这是这个函数的调用关系图:

◆ OsTraceHookInstall()

STATIC VOID OsTraceHookInstall ( VOID  )

初始化事件处理函数

在文件 los_trace.c220 行定义.

221{
223#ifdef LOSCFG_RECORDER_MODE_OFFLINE
225#endif
226}
TRACE_EVENT_HOOK g_traceEventHook
事件钩子函数
Definition: los_trace.c:91
VOID OsTraceHook(UINT32 eventType, UINTPTR identity, const UINTPTR *params, UINT16 paramCount)
OsTraceHook 事件统一处理函数
Definition: los_trace.c:188
TRACE_DUMP_HOOK g_traceDumpHook
输出缓冲区数据
Definition: los_trace.c:92
VOID OsTraceRecordDump(BOOL toClient)
函数调用图:
这是这个函数的调用关系图:

◆ OsTraceHwiFilter()

STATIC_INLINE BOOL OsTraceHwiFilter ( UINT32  hwiNum)

在文件 los_trace.c107 行定义.

108{
109 BOOL ret = ((hwiNum == NUM_HAL_INTERRUPT_UART) || (hwiNum == OS_TICK_INT_NUM));
110#ifdef LOSCFG_KERNEL_SMP
111 ret |= (hwiNum == LOS_MP_IPI_SCHEDULE);
112#endif
113 if (g_traceHwiFilterHook != NULL) {
114 ret |= g_traceHwiFilterHook(hwiNum);
115 }
116 return ret;
117}
@ LOS_MP_IPI_SCHEDULE
!< 唤醒CPU
Definition: los_mp.h:51
LITE_OS_SEC_BSS STATIC TRACE_HWI_FILTER_HOOK g_traceHwiFilterHook
用于跟踪硬中断过滤的钩子函数
Definition: los_trace.c:101
这是这个函数的调用关系图:

◆ OsTraceInit()

STATIC UINT32 OsTraceInit ( VOID  )

跟踪模块初始化

在文件 los_trace.c299 行定义.

300{
301 UINT32 ret;
302
303 if (g_traceState != TRACE_UNINIT) {
304 TRACE_ERROR("trace has been initialized already, the current state is :%d\n", g_traceState);
305 ret = LOS_ERRNO_TRACE_ERROR_STATUS;
306 goto LOS_ERREND;
307 }
308
309#ifdef LOSCFG_TRACE_CLIENT_INTERACT //使能与Trace IDE (dev tools)的交互,包括数据可视化和流程控制
310 ret = OsTracePipelineInit();//在线模式(管道模式)的初始化
311 if (ret != LOS_OK) {
312 goto LOS_ERREND;
313 }
314#endif
315
316#ifdef LOSCFG_TRACE_CONTROL_AGENT //trace任务代理开关,所谓代理是创建专门的任务来处理 trace
318 if (ret != LOS_OK) {
319 TRACE_ERROR("trace init create agentTask error :0x%x\n", ret);
320 goto LOS_ERREND;
321 }
322#endif
323
324#ifdef LOSCFG_RECORDER_MODE_OFFLINE //trace离线模式开关
325//离线模式会将trace frame记录到预先申请好的循环buffer中。如果循环buffer记录的frame过多则可能出现翻转,
326//会覆盖之前的记录,故保持记录的信息始终是最新的信息。
327 ret = OsTraceBufInit(LOSCFG_TRACE_BUFFER_SIZE); //离线模式下buf 大小,这个大小决定了装多少 ObjData 和 TraceEventFrame
328 if (ret != LOS_OK) {
329#ifdef LOSCFG_TRACE_CONTROL_AGENT
331#endif
332 goto LOS_ERREND;
333 }
334#endif
335
336 OsTraceHookInstall();//安装HOOK框架
337 OsTraceCnvInit();//将事件处理函数注册到HOOK框架
338
340
341#ifdef LOSCFG_RECORDER_MODE_ONLINE /* Wait trace client to start trace */
342 g_enableTrace = FALSE;
344#else
345 g_enableTrace = TRUE;
347#endif
348 return LOS_OK;
349LOS_ERREND:
350 return ret;
351}
LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskDelete(UINT32 taskID)
Delete a task.
Definition: los_task.c:968
@ TRACE_UNINIT
Definition: los_trace.h:110
@ TRACE_INITED
Definition: los_trace.h:111
@ TRACE_STARTED
Definition: los_trace.h:112
STATIC UINT32 OsCreateTraceAgentTask(VOID)
OsCreateTraceAgentTask 创建trace任务
Definition: los_trace.c:281
LITE_OS_SEC_BSS STATIC UINT32 g_traceEventCount
Definition: los_trace.c:86
STATIC VOID OsTraceHookInstall(VOID)
初始化事件处理函数
Definition: los_trace.c:220
LITE_OS_SEC_BSS STATIC enum TraceState g_traceState
Definition: los_trace.c:87
UINT32 OsTraceBufInit(UINT32 size)
trace离线模式初始化
Definition: trace_offline.c:63
VOID OsTraceCnvInit(VOID)
Definition: trace_cnv.c:298
UINT32 OsTracePipelineInit(VOID)
函数调用图:

◆ OsTraceIsEnable()

BOOL OsTraceIsEnable ( VOID  )

在文件 los_trace.c215 行定义.

216{
217 return g_enableTrace;
218}
这是这个函数的调用关系图:

◆ OsTraceSetFrame()

STATIC VOID OsTraceSetFrame ( TraceEventFrame frame,
UINT32  eventType,
UINTPTR  identity,
const UINTPTR params,
UINT16  paramCount 
)

在文件 los_trace.c119 行定义.

121{
122 INT32 i;
123 UINT32 intSave;
124
125 (VOID)memset_s(frame, sizeof(TraceEventFrame), 0, sizeof(TraceEventFrame));
126
127 if (paramCount > LOSCFG_TRACE_FRAME_MAX_PARAMS) {
128 paramCount = LOSCFG_TRACE_FRAME_MAX_PARAMS;
129 }
130
131 TRACE_LOCK(intSave);
133 frame->curPid = LOS_GetCurrProcessID();
134 frame->identity = identity;
135 frame->curTime = HalClockGetCycles();
136 frame->eventType = eventType;
137
138#ifdef LOSCFG_TRACE_FRAME_CORE_MSG
139 frame->core.cpuid = ArchCurrCpuid();
140 frame->core.hwiActive = OS_INT_ACTIVE ? TRUE : FALSE;
141 frame->core.taskLockCnt = MIN(OsSchedLockCountGet(), 0xF); /* taskLockCnt is 4 bits, max value = 0xF */
142 frame->core.paramCount = paramCount;
143#endif
144
145#ifdef LOS_TRACE_FRAME_LR
146 /* Get the linkreg from stack fp and storage to frame */
147 LOS_RecordLR(frame->linkReg, LOS_TRACE_LR_RECORD, LOS_TRACE_LR_RECORD, LOS_TRACE_LR_IGNORE);
148#endif
149
150#ifdef LOSCFG_TRACE_FRAME_EVENT_COUNT
153#endif
154 TRACE_UNLOCK(intSave);
155
156 for (i = 0; i < paramCount; i++) {
157 frame->params[i] = params[i];
158 }
159}
VOID LOS_RecordLR(UINTPTR *LR, UINT32 LRSize, UINT32 recordCount, UINT32 jumpCount)
record LR function.
Definition: los_exc.c:1353
LITE_OS_SEC_TEXT UINT32 LOS_CurTaskIDGet(VOID)
Obtain current running task ID.
Definition: los_task.c:331
UINT64 HalClockGetCycles(VOID)
LITE_OS_SEC_TEXT UINT32 LOS_GetCurrProcessID(VOID)
获取当前进程的进程ID
Definition: los_process.c:2161
STATIC INLINE UINT32 OsSchedLockCountGet(VOID)
signed int INT32
Definition: los_typedef.h:60
UINT64 curTime
Definition: los_trace.h:259
UINT32 eventCount
Definition: los_trace.h:272
UINTPTR params[LOSCFG_TRACE_FRAME_MAX_PARAMS]
Definition: los_trace.h:280
UINTPTR identity
Definition: los_trace.h:260
UINTPTR linkReg[LOS_TRACE_LR_RECORD]
Definition: los_trace.h:276
struct TraceEventFrame::CoreStatus core
UINT32 curTask
Definition: los_trace.h:257
UINT32 eventType
Definition: los_trace.h:256
函数调用图:
这是这个函数的调用关系图:

◆ OsTraceSetObj()

VOID OsTraceSetObj ( ObjData obj,
const LosTaskCB tcb 
)

在文件 los_trace.c161 行定义.

162{
163 errno_t ret;
164 SchedParam param = { 0 };
165 (VOID)memset_s(obj, sizeof(ObjData), 0, sizeof(ObjData));
166
167 obj->id = OsTraceGetMaskTid(tcb->taskID);
168 tcb->ops->schedParamGet(tcb, &param);
169 obj->prio = param.priority;
170
171 ret = strncpy_s(obj->name, LOSCFG_TRACE_OBJ_MAX_NAME_SIZE, tcb->taskName, LOSCFG_TRACE_OBJ_MAX_NAME_SIZE - 1);
172 if (ret != EOK) {
173 TRACE_ERROR("Task name copy failed!\n");
174 }
175}
UINT32 id
Definition: los_trace.h:298
CHAR name[LOSCFG_TRACE_OBJ_MAX_NAME_SIZE]
Definition: los_trace.h:300
UINT32 prio
Definition: los_trace.h:299
UINT32(* schedParamGet)(const LosTaskCB *taskCB, SchedParam *param)
获取调度参数
UINT16 priority
UINT32 taskID
CHAR taskName[OS_TCB_NAME_LEN]
const SchedOps * ops
函数调用图:
这是这个函数的调用关系图:

◆ SHELLCMD_ENTRY() [1/5]

SHELLCMD_ENTRY ( tracedump_shellcmd  ,
CMD_TYPE_EX  ,
"trace_dump"  ,
,
(CmdCallBackFunc OsShellCmdTraceDump 
)

◆ SHELLCMD_ENTRY() [2/5]

SHELLCMD_ENTRY ( tracereset_shellcmd  ,
CMD_TYPE_EX  ,
"trace_reset"  ,
,
(CmdCallBackFunc LOS_TraceReset 
)

◆ SHELLCMD_ENTRY() [3/5]

SHELLCMD_ENTRY ( tracesetmask_shellcmd  ,
CMD_TYPE_EX  ,
"trace_mask"  ,
,
(CmdCallBackFunc OsShellCmdTraceSetMask 
)

◆ SHELLCMD_ENTRY() [4/5]

SHELLCMD_ENTRY ( tracestart_shellcmd  ,
CMD_TYPE_EX  ,
"trace_start"  ,
,
(CmdCallBackFunc LOS_TraceStart 
)

◆ SHELLCMD_ENTRY() [5/5]

SHELLCMD_ENTRY ( tracestop_shellcmd  ,
CMD_TYPE_EX  ,
"trace_stop"  ,
,
(CmdCallBackFunc LOS_TraceStop 
)

◆ SPIN_LOCK_INIT()

LITE_OS_SEC_BSS SPIN_LOCK_INIT ( g_traceSpin  )

◆ TraceAgent()

VOID TraceAgent ( VOID  )

在文件 los_trace.c259 行定义.

260{
261 UINT32 ret;
262 TraceClientCmd msg;
263
264 while (1) {
265 (VOID)memset_s(&msg, sizeof(TraceClientCmd), 0, sizeof(TraceClientCmd));
266 ret = OsTraceDataWait();//等待数据到来
267 if (ret == LOS_OK) {
268 OsTraceDataRecv((UINT8 *)&msg, sizeof(TraceClientCmd), 0);
269 OsTraceCmdHandle(&msg);//处理数据
270 }
271 }
272}
STATIC VOID OsTraceCmdHandle(const TraceClientCmd *msg)
trace任务的入口函数,接收串口数据
Definition: los_trace.c:234
unsigned char UINT8
Definition: los_typedef.h:55
UINT32 OsTraceDataWait(VOID)
UINT32 OsTraceDataRecv(UINT8 *data, UINT32 size, UINT32 timeout)
函数调用图:
这是这个函数的调用关系图:

变量说明

◆ g_enableTrace

LITE_OS_SEC_DATA_INIT STATIC volatile BOOL g_enableTrace = FALSE

trace开关

在文件 los_trace.c88 行定义.

◆ g_traceDumpHook

TRACE_DUMP_HOOK g_traceDumpHook = NULL

输出缓冲区数据

在文件 los_trace.c92 行定义.

◆ g_traceEventCount

LITE_OS_SEC_BSS STATIC UINT32 g_traceEventCount

在文件 los_trace.c86 行定义.

◆ g_traceEventHook

TRACE_EVENT_HOOK g_traceEventHook = NULL

事件钩子函数

在文件 los_trace.c91 行定义.

◆ g_traceHwiFilterHook

LITE_OS_SEC_BSS STATIC TRACE_HWI_FILTER_HOOK g_traceHwiFilterHook = NULL

用于跟踪硬中断过滤的钩子函数

在文件 los_trace.c101 行定义.

◆ g_traceMask

LITE_OS_SEC_BSS STATIC UINT32 g_traceMask = TRACE_DEFAULT_MASK

全局变量设置事件掩码,仅记录某些模块的事件

在文件 los_trace.c89 行定义.

◆ g_traceState

LITE_OS_SEC_BSS STATIC enum TraceState g_traceState = TRACE_UNINIT

在文件 los_trace.c87 行定义.

◆ g_traceTaskId

LITE_OS_SEC_BSS STATIC UINT32 g_traceTaskId

在文件 los_trace.c95 行定义.