计算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_BEGIN(ToThreadId);
LastThreadId[CallerCoreId] = ToThreadId;
}