今天看到朋友的博客,他在描述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;
}

在系统10个节拍(100ms)中内统计变量tatal_count计数值,统计出CPU全速运行时的值,然后打开系统调度,再次在相同时间内,使用count计数,使用公式cpu_usage_minor = ((count * 100) % total_count) * 100 / total_count,即可得出数值,使用空闲线程钩子函数rt_thread_idle_sethook()添加到空闲线程中,然后可以调用rt_kprintf函数打印出来CPU占用率。

我目前只学了这种方法,如果有高人有更好的方法欢迎交流。

最新文章

  1. noip2016十连测题解
  2. 面向对象Part3
  3. 让自己也能使用Canvas
  4. saltstack(主机改名)
  5. 继续Get News List
  6. Could not load the &quot;btn_020.disable.png&quot; image referenced from a nib in the bundle with identifier &quot;com.xxx.---0710&quot;
  7. ubuntu 14.04 chromium,firefox 怎样正确安装Adobe flash player
  8. WPF TextElement内容模型简介(转)
  9. OC基础4:类和方法
  10. 【软件project】生存期模型(含图)
  11. 04_Weblogic之受管服务器:配置受管服务器,启动受管服务器,解决因为强制关闭Weblogic之后导致启动有问题的问题,配置boot.properties
  12. UITabBarController及三种控制器的…
  13. Java 学习笔记 (三) Java 日期类型
  14. Orchard克死你 之 刚起步
  15. PHP7 中 ?? 与? :的区别
  16. CF997C Sky Full of Stars
  17. LeetCode算法题-Can Place Flowers(Java实现)
  18. Oracle回收站的清理方法
  19. [CodeForces-1036E] Covered Points 暴力 GCD 求交点
  20. Cmake入门资料

热门文章

  1. JQuery采纳CSS实现DOM显示和隐藏要素
  2. 使用 NodeJS + Express从GET/POST Request 取值
  3. 隐藏在QRCode二维码背后的秘密
  4. 基于IdentityServer4的单点登录——Client
  5. JavaScript eval() 函数,计算某个字符串,并执行其中的的 JavaScript 代码。
  6. Win10《芒果TV》更新v3.5.0夏至版:会员尊享蓝光画质,关联本地视频播放
  7. Redis实现Timeline
  8. 编解码TIFF图像
  9. Android零基础入门第4节:正确安装和配置JDK, 高富帅养成第一招
  10. WP8.1使用HttpClient类