CPU 的使用率一般是我们比较关心的问题,在这里我们就用空闲线程的钩子函数去统计 CPU 的使用率,并通过串口打印出来。
首先我们在初始化线程中设置好钩子函数,并在 LED 线程中给系统人为的加入很多“事情”,让其占用率变高,方便统计,然后每个 1 秒中打印一次 CPU 使用率。其中 CPU 的使用率我们是根据 CPU 的空闲率反推出来的。

#include <rtthread.h>
#include <rthw.h> #define CPU_USAGE_CALC_TICK 10
#define CPU_USAGE_LOOP 100 static rt_uint8_t cpu_usage_major = , cpu_usage_minor= ;
static rt_uint32_t total_count = ; static void cpu_usage_idle_hook(void)
{
rt_tick_t tick;
rt_uint32_t count;
volatile rt_uint32_t loop; if (total_count == )
{
/* get total count */
rt_enter_critical();
tick = rt_tick_get();
while(rt_tick_get() - tick < CPU_USAGE_CALC_TICK)
{
total_count ++;
loop = ; while (loop < CPU_USAGE_LOOP) loop ++;
}
rt_exit_critical();
} count = ;
/* get CPU usage */
tick = rt_tick_get();
while (rt_tick_get() - tick < CPU_USAGE_CALC_TICK)
{
count ++;
loop = ;
while (loop < CPU_USAGE_LOOP) loop ++;
} /* calculate major and minor */
if (count < total_count)
{
count = total_count - count;
cpu_usage_major = (count * ) / total_count;
cpu_usage_minor = ((count * ) % total_count) * / total_count;
}
else
{
total_count = count; /* no CPU usage */
cpu_usage_major = ;
cpu_usage_minor = ;
}
} 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%!!,如下图:

RT-Thread的CPU使用率计算的更多相关文章

  1. CPU使用率计算

    昨天接到临时任务,需要将一个工作线程执行真正工作的时机推迟到CPU空闲时执行.当时第一感觉认为是将线程优先级设置为空闲级别就行了,以为只有CPU空闲下来才会去跑这个线程,实际上应该不是,毕竟即时是空闲 ...

  2. java程序中线程cpu使用率计算

    原文地址:https://www.imooc.com/article/27374 最近确实遇到题目上的刚需,也是花了一段时间来思考这个问题. cpu使用率如何计算 计算使用率在上学那会就经常算,不过往 ...

  3. Linux平台Cpu使用率的计算

    proc文件系统 /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为内核与进程提供通信的接口.用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的 ...

  4. 在linux系统中实现各项监控的关键技术(1)--cpu使用率的计算

    转载自 Linux中通过/proc/stat等文件计算Cpu使用率 http://www.blogjava.net/fjzag/articles/317773.html proc文件系统 /proc文 ...

  5. Linux中通过/proc/stat等文件计算Cpu使用率

    Linux平台Cpu使用率的计算 proc文件系统 /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为内核与进程提供通信的接口.用户和应用程序可以通过/pro ...

  6. CPU使用率原理及计算方式

    本文转载自CPU使用率原理及计算方式 CPU:超线程和多核 超线程(Hyper-Threading ) 超线程是Intel最早提出一项技术,最早出现在2002年的Pentium4上.单个采用超线程的C ...

  7. 查看线程linux cpu使用率

    Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算 转 http://www.cnblogs.com/lidabo/p/4738113.html目录(?)[-] proc文件系统 p ...

  8. Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算

    目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidstat文件 procpidtasktidstat文件 系统中有关进程cpu使用率的常用命令 ps ...

  9. 一文秒懂CPU使用率

    目录 CPU:Cores, and Hyper-Threading  超线程(Hyper-Threading ) 多核(multi-cores) CPU使用率计算 CPU使用率测试 如何计算CPU使用 ...

随机推荐

  1. 菜鸟学Linux命令:bg fg jobs命令 任务管理

    jobs命令 jobs命令用于查看当前终端后台运行的任务 注意和ps的区别: ps命令用于查看瞬间进程的动态 通过一个实例可以理解它们之间的区别,依次执行如下命令:vim & //后台执行vi ...

  2. android常用的一些UI调试命令am,pm

    转自:http://www.52rd.com/Blog/Detail_RD.Blog_blogercn_71675.html android在开发者模式下,我们能够使用adb执行andorid手机上s ...

  3. CI中PHP写法规范(不断更新)

    1.类名首字母大写,多个单词用下划线连接,首字母小写是无效的 举例: class CI_Model 2.routes路由配置中的右侧在配置类名和方法名的时候都是小写,如果大写可能会出现404找不到的错 ...

  4. UVa 11991:Easy Problem from Rujia Liu?(STL练习,map+vector)

    Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, ...

  5. android.intent.action.MAIN 与 android.intent.category.LAUNCHER 的验证理解 (转)

    原文地址:android.intent.action.MAIN 与 android.intent.category.LAUNCHER 的验证理解 作者: 第一种情况:有MAIN,无LAUNCHER,程 ...

  6. Android UI组件学习

    android.view.View类是全部UI组件的父类. 如果一些属性的内容本类找不到的时候一定要到父类之中进行查找. 所谓的学习组件的过程就是一个文档的查找过程. ※ Android之中所有的组件 ...

  7. HDU 4345 Permutation dp

    Permutation Problem Description There is an arrangement of N numbers and a permutation relation that ...

  8. 利用jquery给指定的table动态添加一行、删除一行

    转自:http://www.cnblogs.com/linjiqin/p/3148181.html $("#mytable tr").find("td:nth-child ...

  9. burpsuite绕过本地javascripte上传文件

    burpsuite绕过本地javascripte上传文件   先是找到图片上传的位置:       上传个asp文件试试,一点击上传就出现:       这样基本就可以确定是本地检测文件后缀名的方式来 ...

  10. CSS Counters 计数属性

    CSS Counters其实就是一计数器,早期在CSS中计数器仅存在于ul和ol元素.如果要使用在div这样的元素上,只能通过list-style-image或者是元素的backgroud-image ...