研究结论

2023-05-16

1--------FREERTOS_CONFIG_H-----
extern void StartIdleMonitor(void); 
extern void EndIdleMonitor(void); 
#define traceTASK_SWITCHED_IN()   StartIdleMonitor()
#define traceTASK_SWITCHED_OUT()  EndIdleMonitor()
其实你看traceTASK_SWITCHED_IN这个已经定义过了 是空 我们需要定义它的!

#define configUSE_IDLE_HOOK                      1
#define configUSE_TICK_HOOK                      1

2-------freertos.c--

TaskHandle_t xIdleHandle;

void vApplicationIdleHook( void )
{
	if( xIdleHandle == NULL )
	{
	/* Store the handle tothe idle task. */
	xIdleHandle =xTaskGetCurrentTaskHandle(); //记录空闲任务的句柄
	}
}

int osCPU_TotalIdleTime,osCPU_IdleStartTime,osCPU_IdleSpentTime;
int osCPU_Usage;
void vApplicationTickHook( void )
{
	#define CALCULATION_PERIOD 1000
  static int tick = 0;
 
  if(tick ++ >CALCULATION_PERIOD)  //每1000个tick,刷新一次CPU使用率   
  {
    tick = 0;
   
    if(osCPU_TotalIdleTime> 1000)
    {
      osCPU_TotalIdleTime =1000;
    }
    osCPU_Usage = (100 -(osCPU_TotalIdleTime * 100) / CALCULATION_PERIOD); //这行代码就是CPU使用率的具体计算方法了
    osCPU_TotalIdleTime =0;
  }
}

 void StartIdleMonitor(void) 
 {
   if( xTaskGetCurrentTaskHandle() ==xIdleHandle ) //如果是切入到空闲任务
  {
    osCPU_IdleStartTime =xTaskGetTickCountFromISR();//记录切入到空闲任务的时间点
  }
 
 }
 
 void EndIdleMonitor(void)
{
  if( xTaskGetCurrentTaskHandle() ==xIdleHandle ) //如果是从空闲任务切出
  {
    /* Store the handle to the idle task. */
    osCPU_IdleSpentTime =xTaskGetTickCountFromISR() - osCPU_IdleStartTime; //计算此次空闲任务花费多长时间
    osCPU_TotalIdleTime += osCPU_IdleSpentTime;//空闲任务所占时间进行累加
  }
}


uint16_t osGetCPUUsage(void)
{
  return (uint16_t)osCPU_Usage;         //直接返回全局变量osCPU_Usage,即CPU使用率
}

此后可以调用osGetCPUUsage查看了

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

研究结论 的相关文章

随机推荐