更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
Trace
Trace 的协作图:

结构体

struct  TraceClientCmd
 
struct  TraceNotifyFrame
 
struct  TraceOfflineHeaderInfo
 
struct  TraceBaseHeaderInfo
 http://weharmonyos.com/openharmony/zh-cn/device-dev/kernel/kernel-mini-memory-trace.html 更多...
 
struct  TraceEventFrame
 
struct  ObjData
 
struct  OfflineHead
 

类型定义

typedef BOOL(* TRACE_HWI_FILTER_HOOK) (UINT32 hwiNum)
 Define the type of trace hardware interrupt filter hook function. 更多...
 

枚举

enum  TraceState { TRACE_UNINIT = 0 , TRACE_INITED , TRACE_STARTED , TRACE_STOPED }
 
enum  LOS_TRACE_MASK {
  TRACE_SYS_FLAG = 0x10 , TRACE_HWI_FLAG = 0x20 , TRACE_TASK_FLAG = 0x40 , TRACE_SWTMR_FLAG = 0x80 ,
  TRACE_MEM_FLAG = 0x100 , TRACE_QUE_FLAG = 0x200 , TRACE_EVENT_FLAG = 0x400 , TRACE_SEM_FLAG = 0x800 ,
  TRACE_MUX_FLAG = 0x1000 , TRACE_IPC_FLAG = 0x2000 , TRACE_MAX_FLAG = 0x80000000 , TRACE_USER_DEFAULT_FLAG = 0xFFFFFFF0
}
 
enum  LOS_TRACE_TYPE {
  SYS_ERROR = TRACE_SYS_FLAG | 0 , SYS_START = TRACE_SYS_FLAG | 1 , SYS_STOP = TRACE_SYS_FLAG | 2 , HWI_CREATE = TRACE_HWI_FLAG | 0 ,
  HWI_CREATE_SHARE = TRACE_HWI_FLAG | 1 , HWI_DELETE = TRACE_HWI_FLAG | 2 , HWI_DELETE_SHARE = TRACE_HWI_FLAG | 3 , HWI_RESPONSE_IN = TRACE_HWI_FLAG | 4 ,
  HWI_RESPONSE_OUT = TRACE_HWI_FLAG | 5 , HWI_ENABLE = TRACE_HWI_FLAG | 6 , HWI_DISABLE = TRACE_HWI_FLAG | 7 , HWI_TRIGGER = TRACE_HWI_FLAG | 8 ,
  HWI_SETPRI = TRACE_HWI_FLAG | 9 , HWI_CLEAR = TRACE_HWI_FLAG | 10 , HWI_SETAFFINITY = TRACE_HWI_FLAG | 11 , HWI_SENDIPI = TRACE_HWI_FLAG | 12 ,
  TASK_CREATE = TRACE_TASK_FLAG | 0 , TASK_PRIOSET = TRACE_TASK_FLAG | 1 , TASK_DELETE = TRACE_TASK_FLAG | 2 , TASK_SUSPEND = TRACE_TASK_FLAG | 3 ,
  TASK_RESUME = TRACE_TASK_FLAG | 4 , TASK_SWITCH = TRACE_TASK_FLAG | 5 , TASK_SIGNAL = TRACE_TASK_FLAG | 6 , SWTMR_CREATE = TRACE_SWTMR_FLAG | 0 ,
  SWTMR_DELETE = TRACE_SWTMR_FLAG | 1 , SWTMR_START = TRACE_SWTMR_FLAG | 2 , SWTMR_STOP = TRACE_SWTMR_FLAG | 3 , SWTMR_EXPIRED = TRACE_SWTMR_FLAG | 4 ,
  MEM_ALLOC = TRACE_MEM_FLAG | 0 , MEM_ALLOC_ALIGN = TRACE_MEM_FLAG | 1 , MEM_REALLOC = TRACE_MEM_FLAG | 2 , MEM_FREE = TRACE_MEM_FLAG | 3 ,
  MEM_INFO_REQ = TRACE_MEM_FLAG | 4 , MEM_INFO = TRACE_MEM_FLAG | 5 , QUEUE_CREATE = TRACE_QUE_FLAG | 0 , QUEUE_DELETE = TRACE_QUE_FLAG | 1 ,
  QUEUE_RW = TRACE_QUE_FLAG | 2 , EVENT_CREATE = TRACE_EVENT_FLAG | 0 , EVENT_DELETE = TRACE_EVENT_FLAG | 1 , EVENT_READ = TRACE_EVENT_FLAG | 2 ,
  EVENT_WRITE = TRACE_EVENT_FLAG | 3 , EVENT_CLEAR = TRACE_EVENT_FLAG | 4 , SEM_CREATE = TRACE_SEM_FLAG | 0 , SEM_DELETE = TRACE_SEM_FLAG | 1 ,
  SEM_PEND = TRACE_SEM_FLAG | 2 , SEM_POST = TRACE_SEM_FLAG | 3 , MUX_CREATE = TRACE_MUX_FLAG | 0 , MUX_DELETE = TRACE_MUX_FLAG | 1 ,
  MUX_PEND = TRACE_MUX_FLAG | 2 , MUX_POST = TRACE_MUX_FLAG | 3 , IPC_WRITE_DROP = TRACE_IPC_FLAG | 0 , IPC_WRITE = TRACE_IPC_FLAG | 1 ,
  IPC_READ_DROP = TRACE_IPC_FLAG | 2 , IPC_READ = TRACE_IPC_FLAG | 3 , IPC_TRY_READ = TRACE_IPC_FLAG | 4 , IPC_READ_TIMEOUT = TRACE_IPC_FLAG | 5 ,
  IPC_KILL = TRACE_IPC_FLAG | 6
}
 

函数

UINT32 OsTraceDataEncode (UINT8 type, const TlvTable *table, UINT8 *src, UINT8 *dest, INT32 destLen)
 Encode trace raw data. 更多...
 
UINT32 LOS_TraceStart (VOID)
 Start trace. 更多...
 
VOID LOS_TraceStop (VOID)
 Stop trace. 更多...
 
VOID LOS_TraceReset (VOID)
 Clear the trace buf. 更多...
 
VOID LOS_TraceEventMaskSet (UINT32 mask)
 Set trace event mask. 更多...
 
VOID LOS_TraceRecordDump (BOOL toClient)
 Offline trace buffer display. 更多...
 
OfflineHeadLOS_TraceRecordGet (VOID)
 Offline trace buffer export. 更多...
 
VOID LOS_TraceHwiFilterHookReg (TRACE_HWI_FILTER_HOOK hook)
 Hwi num fliter hook. 更多...
 

详细描述

类型定义说明

◆ TRACE_HWI_FILTER_HOOK

typedef BOOL(* TRACE_HWI_FILTER_HOOK) (UINT32 hwiNum)

Define the type of trace hardware interrupt filter hook function.

Description:
User can register fliter function by LOS_TraceHwiFilterHookReg to filter hardware interrupt events. Return true if user don't need trace the certain number.
注意
None.
参数
hwiNum[IN] Type UINT32. The hardware interrupt number.
返回值
#TRUE0x00000001: Not record the certain number.
#FALSE0x00000000: Need record the certain number.
Dependency:
  • los_trace.h: the header file that contains the API declaration.

在文件 los_trace.h336 行定义.

枚举类型说明

◆ LOS_TRACE_MASK

Trace mask is used to filter events in runtime. Each mask keep only one unique bit to 1, and user can define own module's trace mask.

枚举值
TRACE_SYS_FLAG 

跟踪系统

TRACE_HWI_FLAG 

跟踪硬中断

TRACE_TASK_FLAG 

跟踪任务/线程

TRACE_SWTMR_FLAG 

跟踪软件定时器

TRACE_MEM_FLAG 

跟踪内存

TRACE_QUE_FLAG 

跟踪队列

TRACE_EVENT_FLAG 

跟踪事件

TRACE_SEM_FLAG 

跟踪信号量

TRACE_MUX_FLAG 

跟踪互斥量

TRACE_IPC_FLAG 

跟踪IPC

TRACE_MAX_FLAG 
TRACE_USER_DEFAULT_FLAG 

在文件 los_trace.h121 行定义.

121 {
122 TRACE_SYS_FLAG = 0x10, ///< 跟踪系统
123 TRACE_HWI_FLAG = 0x20, ///< 跟踪硬中断
124 TRACE_TASK_FLAG = 0x40, ///< 跟踪任务/线程
125 TRACE_SWTMR_FLAG = 0x80, ///< 跟踪软件定时器
126 TRACE_MEM_FLAG = 0x100, ///< 跟踪内存
127 TRACE_QUE_FLAG = 0x200, ///< 跟踪队列
128 TRACE_EVENT_FLAG = 0x400, ///< 跟踪事件
129 TRACE_SEM_FLAG = 0x800, ///< 跟踪信号量
130 TRACE_MUX_FLAG = 0x1000, ///< 跟踪互斥量
131 TRACE_IPC_FLAG = 0x2000, ///< 跟踪IPC
132
133 TRACE_MAX_FLAG = 0x80000000,
134 TRACE_USER_DEFAULT_FLAG = 0xFFFFFFF0,
LOS_TRACE_MASK
Definition: los_trace.h:121
@ TRACE_MEM_FLAG
跟踪内存
Definition: los_trace.h:126
@ TRACE_MUX_FLAG
跟踪互斥量
Definition: los_trace.h:130
@ TRACE_HWI_FLAG
跟踪硬中断
Definition: los_trace.h:123
@ TRACE_SWTMR_FLAG
跟踪软件定时器
Definition: los_trace.h:125
@ TRACE_IPC_FLAG
跟踪IPC
Definition: los_trace.h:131
@ TRACE_QUE_FLAG
跟踪队列
Definition: los_trace.h:127
@ TRACE_SYS_FLAG
跟踪系统
Definition: los_trace.h:122
@ TRACE_USER_DEFAULT_FLAG
Definition: los_trace.h:134
@ TRACE_SEM_FLAG
跟踪信号量
Definition: los_trace.h:129
@ TRACE_TASK_FLAG
跟踪任务/线程
Definition: los_trace.h:124
@ TRACE_EVENT_FLAG
跟踪事件
Definition: los_trace.h:128
@ TRACE_MAX_FLAG
Definition: los_trace.h:133

◆ LOS_TRACE_TYPE

Trace event type which indicate the exactly happend events, user can define own module's event type like TRACE_::MODULE::_FLAG | NUMBER. 28 4 0 0 0 0 0 0 0 0 X X X X X X X X 0 0 0 0 0 0 | | | trace_module_flag number

枚举值
SYS_ERROR 
SYS_START 

trace模块开始

SYS_STOP 

trace模块停止

HWI_CREATE 
HWI_CREATE_SHARE 
HWI_DELETE 
HWI_DELETE_SHARE 
HWI_RESPONSE_IN 
HWI_RESPONSE_OUT 
HWI_ENABLE 
HWI_DISABLE 
HWI_TRIGGER 
HWI_SETPRI 
HWI_CLEAR 
HWI_SETAFFINITY 
HWI_SENDIPI 
TASK_CREATE 
TASK_PRIOSET 
TASK_DELETE 
TASK_SUSPEND 
TASK_RESUME 
TASK_SWITCH 
TASK_SIGNAL 
SWTMR_CREATE 
SWTMR_DELETE 
SWTMR_START 
SWTMR_STOP 
SWTMR_EXPIRED 
MEM_ALLOC 
MEM_ALLOC_ALIGN 
MEM_REALLOC 
MEM_FREE 
MEM_INFO_REQ 
MEM_INFO 
QUEUE_CREATE 
QUEUE_DELETE 
QUEUE_RW 
EVENT_CREATE 
EVENT_DELETE 
EVENT_READ 
EVENT_WRITE 
EVENT_CLEAR 
SEM_CREATE 
SEM_DELETE 
SEM_PEND 
SEM_POST 
MUX_CREATE 
MUX_DELETE 
MUX_PEND 
MUX_POST 
IPC_WRITE_DROP 
IPC_WRITE 
IPC_READ_DROP 
IPC_READ 
IPC_TRY_READ 
IPC_READ_TIMEOUT 
IPC_KILL 

在文件 los_trace.h147 行定义.

147 { //跟进模块的具体事件
148 /* 0x10~0x1F */
150 SYS_START = TRACE_SYS_FLAG | 1, ///< trace模块开始
151 SYS_STOP = TRACE_SYS_FLAG | 2, ///< trace模块停止
152
153 /* 0x20~0x2F */
167
168 /* 0x40~0x4F */
176
177 /* 0x80~0x8F */
183
184 /* 0x100~0x10F */
191
192 /* 0x200~0x20F */
196
197 /* 0x400~0x40F */
203
204 /* 0x800~0x80F */
209
210 /* 0x1000~0x100F */
215
216 /* 0x2000~0x200F */
LOS_TRACE_TYPE
Definition: los_trace.h:147
@ QUEUE_DELETE
Definition: los_trace.h:194
@ HWI_DELETE_SHARE
Definition: los_trace.h:157
@ HWI_SETAFFINITY
Definition: los_trace.h:165
@ HWI_SENDIPI
Definition: los_trace.h:166
@ SEM_CREATE
Definition: los_trace.h:205
@ MEM_INFO
Definition: los_trace.h:190
@ TASK_SUSPEND
Definition: los_trace.h:172
@ SEM_DELETE
Definition: los_trace.h:206
@ IPC_READ_TIMEOUT
Definition: los_trace.h:222
@ HWI_CREATE_SHARE
Definition: los_trace.h:155
@ MEM_ALLOC
Definition: los_trace.h:185
@ QUEUE_CREATE
Definition: los_trace.h:193
@ IPC_TRY_READ
Definition: los_trace.h:221
@ TASK_DELETE
Definition: los_trace.h:171
@ EVENT_DELETE
Definition: los_trace.h:199
@ TASK_PRIOSET
Definition: los_trace.h:170
@ MUX_DELETE
Definition: los_trace.h:212
@ IPC_READ_DROP
Definition: los_trace.h:219
@ EVENT_CREATE
Definition: los_trace.h:198
@ TASK_CREATE
Definition: los_trace.h:169
@ SYS_ERROR
Definition: los_trace.h:149
@ IPC_WRITE_DROP
Definition: los_trace.h:217
@ SWTMR_STOP
Definition: los_trace.h:181
@ MEM_REALLOC
Definition: los_trace.h:187
@ IPC_READ
Definition: los_trace.h:220
@ QUEUE_RW
Definition: los_trace.h:195
@ HWI_RESPONSE_OUT
Definition: los_trace.h:159
@ MEM_INFO_REQ
Definition: los_trace.h:189
@ TASK_RESUME
Definition: los_trace.h:173
@ IPC_WRITE
Definition: los_trace.h:218
@ MUX_CREATE
Definition: los_trace.h:211
@ SWTMR_DELETE
Definition: los_trace.h:179
@ MUX_PEND
Definition: los_trace.h:213
@ SYS_STOP
trace模块停止
Definition: los_trace.h:151
@ HWI_ENABLE
Definition: los_trace.h:160
@ SWTMR_EXPIRED
Definition: los_trace.h:182
@ SEM_PEND
Definition: los_trace.h:207
@ SWTMR_START
Definition: los_trace.h:180
@ TASK_SIGNAL
Definition: los_trace.h:175
@ SWTMR_CREATE
Definition: los_trace.h:178
@ HWI_SETPRI
Definition: los_trace.h:163
@ HWI_TRIGGER
Definition: los_trace.h:162
@ EVENT_CLEAR
Definition: los_trace.h:202
@ EVENT_READ
Definition: los_trace.h:200
@ SEM_POST
Definition: los_trace.h:208
@ SYS_START
trace模块开始
Definition: los_trace.h:150
@ IPC_KILL
Definition: los_trace.h:223
@ HWI_RESPONSE_IN
Definition: los_trace.h:158
@ MUX_POST
Definition: los_trace.h:214
@ MEM_ALLOC_ALIGN
Definition: los_trace.h:186
@ HWI_DELETE
Definition: los_trace.h:156
@ EVENT_WRITE
Definition: los_trace.h:201
@ TASK_SWITCH
Definition: los_trace.h:174
@ HWI_DISABLE
Definition: los_trace.h:161
@ MEM_FREE
Definition: los_trace.h:188
@ HWI_CREATE
Definition: los_trace.h:154
@ HWI_CLEAR
Definition: los_trace.h:164

◆ TraceState

enum TraceState

Trace state. | 跟踪状态

枚举值
TRACE_UNINIT 

trace isn't inited | 未初始化

TRACE_INITED 

trace is inited but not started yet | 已初始化但未开始

TRACE_STARTED 

trace is started and system is tracing | 跟踪进行中...

TRACE_STOPED 

trace is stopped | 跟踪结束

在文件 los_trace.h109 行定义.

109 {
110 TRACE_UNINIT = 0, /**< trace isn't inited | 未初始化*/
111 TRACE_INITED, /**< trace is inited but not started yet | 已初始化但未开始*/
112 TRACE_STARTED, /**< trace is started and system is tracing | 跟踪进行中...*/
113 TRACE_STOPED, /**< trace is stopped | 跟踪结束*/
114};
@ TRACE_UNINIT
Definition: los_trace.h:110
@ TRACE_INITED
Definition: los_trace.h:111
@ TRACE_STOPED
Definition: los_trace.h:113
@ TRACE_STARTED
Definition: los_trace.h:112

函数说明

◆ LOS_TraceEventMaskSet()

VOID LOS_TraceEventMaskSet ( UINT32  mask)

Set trace event mask.

Description:
Set trace event mask.
注意
  • Set trace event filter mask.
  • The Default mask is (TRACE_HWI_FLAG | TRACE_TASK_FLAG), stands for switch on task and hwi events.
  • Customize mask according to the type defined in enum LOS_TRACE_MASK to switch on corresponding module's trace.
  • The system's trace mask will be overrode by the input parameter.
参数
mask[IN] Type UINT32. The mask used to filter events of LOS_TRACE_MASK.
返回值
#NA.
Dependency:
  • los_trace.h: the header file that contains the API declaration.
参见
LOS_TraceEventMaskSet

Set trace event mask.

在文件 los_trace.c398 行定义.

399{
400 g_traceMask = mask & EVENT_MASK;
401}
LITE_OS_SEC_BSS STATIC UINT32 g_traceMask
全局变量设置事件掩码,仅记录某些模块的事件
Definition: los_trace.c:89
这是这个函数的调用关系图:

◆ LOS_TraceHwiFilterHookReg()

VOID LOS_TraceHwiFilterHookReg ( TRACE_HWI_FILTER_HOOK  hook)

Hwi num fliter hook.

Description:
Hwi fliter function.
注意
  • Filter the hwi events by hwi num
参数
hook[IN] Type TRACE_HWI_FILTER_HOOK. The user defined hook for hwi num filter, the hook should return true if you don't want trace this hwi num.
返回值
#None
Dependency:
  • los_trace.h: the header file that contains the API declaration.
参见
LOS_TraceHwiFilterHookReg

Hwi num fliter hook.

在文件 los_trace.c427 行定义.

428{
429 UINT32 intSave;
430
431 TRACE_LOCK(intSave);
432 g_traceHwiFilterHook = hook;// 注册全局钩子函数
433 TRACE_UNLOCK(intSave);
434}
LITE_OS_SEC_BSS STATIC TRACE_HWI_FILTER_HOOK g_traceHwiFilterHook
用于跟踪硬中断过滤的钩子函数
Definition: los_trace.c:101
unsigned int UINT32
Definition: los_typedef.h:57

◆ LOS_TraceRecordDump()

VOID LOS_TraceRecordDump ( BOOL  toClient)

Offline trace buffer display.

Description:
Display trace buf data only at offline mode.
注意
  • This API can be called only after that trace stopped. Otherwise the trace dump will be failed.
  • Trace data will be send to pipeline when user set toClient = TRUE. Otherwise it will be formatted and printed out.
参数
toClient[IN] Type BOOL. Whether send trace data to Client through pipeline.
返回值
#NA
Dependency:
  • los_trace.h: the header file that contains the API declaration.
参见
LOS_TraceRecordDump

Offline trace buffer display.

在文件 los_trace.c403 行定义.

404{
405 if (g_traceState != TRACE_STOPED) {
406 TRACE_ERROR("trace dump must after trace stopped , the current state is : %d\n", g_traceState);
407 return;
408 }
409 OsTraceRecordDump(toClient);
410}
LITE_OS_SEC_BSS STATIC enum TraceState g_traceState
Definition: los_trace.c:87
VOID OsTraceRecordDump(BOOL toClient)
函数调用图:
这是这个函数的调用关系图:

◆ LOS_TraceRecordGet()

OfflineHead * LOS_TraceRecordGet ( VOID  )

Offline trace buffer export.

Description:
Return the trace buf only at offline mode.
注意
  • This API can be called only after that trace buffer has been established.
  • The return buffer's address is a critical resource, user can only ready.
参数
NA
返回值
#OfflineHead*The trace buffer's address, analyze this buffer according to the structure of OfflineHead.
Dependency:
  • los_trace.h: the header file that contains the API declaration.
参见
LOS_TraceRecordGet

Offline trace buffer export.

在文件 los_trace.c412 行定义.

413{
414 return OsTraceRecordGet();
415}
OfflineHead * OsTraceRecordGet(VOID)
函数调用图:
这是这个函数的调用关系图:

◆ LOS_TraceReset()

VOID LOS_TraceReset ( VOID  )

Clear the trace buf.

Description:
Clear the event frames in trace buf only at offline mode.
注意
  • This API can be called only after that trace buffer has been established. Otherwise, the trace will be failed.
参数
None.
返回值
#NA
Dependency:
  • los_trace.h: the header file that contains the API declaration.
参见
LOS_TraceReset

Clear the trace buf.

在文件 los_trace.c417 行定义.

418{
419 if (g_traceState == TRACE_UNINIT) {
420 TRACE_ERROR("trace not inited, be sure LOS_TraceInit excute success\n");
421 return;
422 }
423
424 OsTraceReset();
425}
VOID OsTraceReset(VOID)
重置循环buf
函数调用图:
这是这个函数的调用关系图:

◆ LOS_TraceStart()

UINT32 LOS_TraceStart ( VOID  )

Start trace.

Description:
This API is used to start trace.
注意
  • Start trace
参数
None.
返回值
#LOS_ERRNO_TRACE_ERROR_STATUS0x02001400: Trace start failed.
#LOS_OK0x00000000: Trace start success.
Dependency:
  • los_trace.h: the header file that contains the API declaration.
参见
LOS_TraceStart

Start trace.

在文件 los_trace.c353 行定义.

354{
355 UINT32 intSave;
356 UINT32 ret = LOS_OK;
357
358 TRACE_LOCK(intSave);
360 goto START_END;
361 }
362
363 if (g_traceState == TRACE_UNINIT) {//必须初始化好
364 TRACE_ERROR("trace not inited, be sure LOS_TraceInit excute success\n");
365 ret = LOS_ERRNO_TRACE_ERROR_STATUS;
366 goto START_END;
367 }
368
369 OsTraceNotifyStart();//通知系统开始
370
371 g_enableTrace = TRUE; //使能trace功能
372 g_traceState = TRACE_STARTED;//设置状态,已开始
373
374 TRACE_UNLOCK(intSave);
375 LOS_TRACE(MEM_INFO_REQ, m_aucSysMem0);//输出日志
376 return ret;
377START_END:
378 TRACE_UNLOCK(intSave);
379 return ret;
380}
UINT8 * m_aucSysMem0
异常交互动态内存池地址的起始地址,当不支持异常交互特性时,m_aucSysMem0等于m_aucSysMem1。
Definition: los_memory.c:107
LITE_OS_SEC_DATA_INIT STATIC volatile BOOL g_enableTrace
trace开关
Definition: los_trace.c:88
这是这个函数的调用关系图:

◆ LOS_TraceStop()

VOID LOS_TraceStop ( VOID  )

Stop trace.

Description:
This API is used to stop trace.
注意
  • Stop trace
参数
None.
返回值
#None.
Dependency:
  • los_trace.h: the header file that contains the API declaration.
参见
LOS_TraceStop

Stop trace.

在文件 los_trace.c382 行定义.

383{
384 UINT32 intSave;
385
386 TRACE_LOCK(intSave);
388 goto STOP_END;
389 }
390
391 g_enableTrace = FALSE;
393 OsTraceNotifyStop();
394STOP_END:
395 TRACE_UNLOCK(intSave);
396}
这是这个函数的调用关系图:

◆ OsTraceDataEncode()

UINT32 OsTraceDataEncode ( UINT8  type,
const TlvTable table,
UINT8 src,
UINT8 dest,
INT32  destLen 
)

Encode trace raw data.

Description:
This API is used to encode trace raw data to tlv data.
注意
  • Encade trace data
参数
type[IN] Type UINT8. The type stands for different struct of src data.
src[IN] Type UINT8 *. The raw trace data.
table[IN] Type #const TlvTable *. The tlv table descript elemOffset and elemSize.
dest[OUT] Type UINT8 *. The tlv data.
destLen[IN] Type UINT8 *. The tlv buf max len.
返回值
#0convert failed.
UINT32convert success bytes.
Dependency:
  • trace_tlv.h: the header file that contains the API declaration.
参见
OsTraceDataEncode

对trace数据进行 Tlv 编码

TLV 是一种可变的格式,其中:

T 可以理解为 Tag 或 Type ,用于标识标签或者编码格式信息; L 定义数值的长度; V 表示实际的数值。 T 和 L 的长度固定,一般是2或4个字节,V 的长度由 Length 指定。

要正确的解析对方发来的数据除了统一数据格式之外还要统一字节序。字节序是指多字节数据在计算机内存中存储 或者网络传输时各字节的存储顺序。字节序一般分为大端和小端。

大端模式(Big-Endian): 高位字节放在内存的低地址端,低位字节排放在内存的高地址端。 小端模式(Little-Endian): 低位字节放在内存的低地址端,高位字节放在内存的高地址端。

使用 htonl 将 Tag(或Type)转成网络字节序,指针偏移 4; 使用 htonl 将 Length 转成网络字节序,指针偏移 4; 若值 Value 为 int、char、short、long 类型,将其转为网络字节序,指针偏移;若值为字符串,写入后指针偏移 Length; 重复上述三步,继续编码后面的 TLV 单元。

在文件 trace_tlv.c115 行定义.

116{
117 UINT16 crc;
118 INT32 len;
119 INT32 tlvBufLen;
120 UINT8 *tlvBuf = NULL;
121
122 TraceMsgTlvHead *head = (TraceMsgTlvHead *)dest;
123 tlvBufLen = destLen - sizeof(TraceMsgTlvHead);
124
125 if ((tlvBufLen <= 0) || (table == NULL)) {
126 return 0;
127 }
128
129 tlvBuf = dest + sizeof(TraceMsgTlvHead);
130 len = OsTlvEncode(table, src, tlvBuf, tlvBufLen);
131 crc = CalcCrc16(tlvBuf, len);
132
133 head->magicNum = TRACE_TLV_MSG_HEAD;
134 head->msgType = type;
135 head->len = len;
136 head->crc = crc;
137 return len + sizeof(TraceMsgTlvHead);
138}
unsigned short UINT16
Definition: los_typedef.h:56
signed int INT32
Definition: los_typedef.h:60
unsigned char UINT8
Definition: los_typedef.h:55
TLV协议 消息头 https://blog.csdn.net/Shallwen_Deng/article/details/88930288
Definition: trace_tlv.h:47
UINT8 magicNum
魔法数字
Definition: trace_tlv.h:48
UINT16 len
消息长度
Definition: trace_tlv.h:50
UINT16 crc
CRC校验
Definition: trace_tlv.h:51
UINT8 msgType
消息类型
Definition: trace_tlv.h:49
STATIC UINT32 OsTlvEncode(const TlvTable *table, UINT8 *srcBuf, UINT8 *tlvBuf, INT32 tlvBufLen)
Definition: trace_tlv.c:79
STATIC UINT16 CalcCrc16(const UINT8 *buf, UINT32 len)
Definition: trace_tlv.c:39
函数调用图:
这是这个函数的调用关系图: