RT-Thread的CPU使用率计算
来源:互联网 发布:scala编程完整版 pdf 编辑:程序博客网 时间:2024/06/08 03:52
CPU 的使用率一般是我们比较关心的问题,在这里我们就用空闲线程的钩子函数去统计 CPU 的使用率,并通过串口打印出来。
首先我们在初始化线程中设置好钩子函数,并在 LED 线程中给系统人为的加入很多“事情”,让其占用率变高,方便统计,然后每个 1 秒中打印一次 CPU 使用率。其中 CPU 的使用率我们是根据 CPU 的空闲率反推出来的。
//CPU使用率#include#include #define CPU_USAGE_CALC_TICK 10#define CPU_USAGE_LOOP 100static rt_uint8_t cpu_usage_major = 0, cpu_usage_minor= 0;static rt_uint32_t total_count = 0;static void cpu_usage_idle_hook(void){ rt_tick_t tick; rt_uint32_t count; volatile rt_uint32_t loop; if (total_count == 0) { /* get total count */ 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; }}void cpu_usage_get(rt_uint8_t *major, rt_uint8_t *minor){ RT_ASSERT(major != RT_NULL); RT_ASSERT(minor != RT_NULL); *major = cpu_usage_major; *minor = cpu_usage_minor;}void cpu_usage_init(void){ /* set idle thread hook */ rt_thread_idle_sethook(cpu_usage_idle_hook);}
前面说过,系统的心跳时钟过快,会增加 cpu 的负担,我们可以在这里来验证,读者可
以将系统滴答时间改为 1ms,然后你将会发现 cpu 的使用率从 24%升高到了 87%!!,如下图:
阅读全文
0 0
- RT-Thread的CPU使用率计算
- RT-Thread的CPU使用率计算
- CPU使用率的计算
- cpu使用率的计算
- CPU使用率的计算【总结】
- Linux平台Cpu使用率的计算
- C++计算windows的cpu使用率
- Linux平台Cpu使用率的计算
- Linux平台Cpu使用率的计算
- Linux平台CPU使用率的计算
- Linux平台Cpu使用率的计算
- Linux平台Cpu使用率的计算
- LINUX计算CPU、内存的使用率
- Linux平台Cpu使用率的计算
- Linux平台Cpu使用率的计算
- LINUX计算CPU、内存的使用率
- Linux平台CPU使用率的计算
- Linux平台Cpu使用率的计算
- php将当前时间戳增加一年(year)
- 学习总结
- java网络通信编程
- <框架篇(4)>Spring配置AOP的方式
- GOLANG使用Context管理关联goroutine
- RT-Thread的CPU使用率计算
- Canopy聚类算法
- hibernate 懒加载异常分析: failed to lazily initialize a collection of role
- 物体缓慢转向目标点
- 解决Things are going to break, please only change locale by creating wxLocale objects...
- AngularJS 教程(一)
- 机器学习知识点(三十二)微积分基础
- 下拉列表的赋值,和默认选中
- dataframe 内的to_csv和from_csv能使存储的数据不变