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(使用前将#替换为@)