zoukankan      html  css  js  c++  java
  • RT-Thread的CPU使用率计算

    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 = 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%!!,如下图:

  • 相关阅读:
    .net程序控制post数据 需登陆后保持session的方法
    简单分页查询SQL语句
    通过文本编辑器提交报从客户端中检测到有潜在危险的 Request.Form 值的错误
    Visual Studio 很卡、重置初始状态
    Jquery获取url中的参数
    Centos 6 安装桌面环境
    Jquery使用ajax实例
    一般处理程序使用session
    如何简单的发布一个react组件npm包
    BFC、IFC、GFC 和 FFC的概念
  • 原文地址:https://www.cnblogs.com/yygsj/p/5500943.html
Copyright © 2011-2022 走看看