今天看到朋友的博客,他在描述RT-Thread钩子函数时,简单提了下RT-Thread中CPU占用,没有具体描述,所以我在这里做下补充。
RT-Thread查看CPU使用率时,我知道的有这种方法。
大概原理就是,在相同时间内,统计CPU在不调度的情况下和CPU在调度情况下变量的计数值,得出CPU空闲率,CPU占用率 = 1-空闲率。
具体实现如下:
首先定义节拍数。
定义钩子函数
将钩子函数添加到空闲线程中
在钩子函数cpu_usage_idle_hook(void)中添加如下代码
rt_tick_t tick; rt_uint32_t count; volatile rt_uint32_t loop; if (total_count == 0) { rt_enter_critical(); //关闭系统调度 tick = rt_tick_get(); while(rt_tick_get() - tick < CPU_USAGE_CALC_TICK) { total_count ++; loop = 0; while (loop < CPU_USAGE_LOOP) loop ++; } rt_exit_critical();// 打开系统调度 } count = 0; /* get CPU usage */ tick = rt_tick_get(); while (rt_tick_get() - tick < CPU_USAGE_CALC_TICK) { count ++; loop = 0; while (loop < CPU_USAGE_LOOP) loop ++; } /* calculate major and minor */ if (count < total_count) { count = total_count - count; cpu_usage_major = (count * 100) / total_count; cpu_usage_minor = ((count * 100) % total_count) * 100 / total_count; } else { total_count = count; /* no CPU usage */ cpu_usage_major = 0; cpu_usage_minor = 0; }