5、AUTOSAR OS中Post Task Hook、Pre Task Hook 和 Os_Thread_Trace --用法分享

📅 2026/7/18 3:56:40
5、AUTOSAR OS中Post Task Hook、Pre Task Hook 和 Os_Thread_Trace --用法分享
计算CPU负载PreTaskHook与PostTaskHook时间测量机制PreTaskHook和PostTaskHook用于计算每个任务的执行时间进而评估系统负载。在PreTaskHook(void)中获取进入任务时的时间戳然后在PostTaskHook中计算时间差得到任务切换与执行的总耗时。通过(void)GetTaskID(task_id)可获取当前任务ID。FUNC(void, OS_PRETASKHOOK_CODE) PreTaskHook(void){/*********************************************************************************************************************** DO NOT CHANGE THIS COMMENT! USERBLOCK OS_Callout_Stubs_PreTaskHook*********************************************************************************************************************/OS_PreTask_Execution();/*********************************************************************************************************************** DO NOT CHANGE THIS COMMENT! /USERBLOCK*********************************************************************************************************************/}FUNC(void, OS_POSTTASKHOOK_CODE) PostTaskHook(void){/*********************************************************************************************************************** DO NOT CHANGE THIS COMMENT! USERBLOCK OS_Callout_Stubs_PostTaskHook*********************************************************************************************************************/OS_PostTask_Execution();/*********************************************************************************************************************** DO NOT CHANGE THIS COMMENT! /USERBLOCK*********************************************************************************************************************/}计算每个任务的执行时间Os_Thread_Trace是事件驱动的跟踪机制用于连续记录任务执行过程中的内部事件。根据进出同一个任务id来获取该任务执行时间void Os_Thread_Trace(Os_TraceThreadIdType FromThreadId,uint8 FromThreadReason,Os_TraceThreadIdType ToThreadId,uint8 ToThreadReason,CoreIdType CallerCoreId){if(FromThreadId LastThreadId[CallerCoreId]) /*非第一次执行*/{THREAD_CALCULATE_END(FromThreadId);/*记录执行时间*/THREAD_TRACE(CallerCoreId,threadindex,FromThreadId);}THREAD_CALCULATE_BEGINToThreadId);LastThreadId[CallerCoreId] ToThreadId;}顺便提示一个获取任务堆栈占用率的接口Os_GetTaskStackUsage