ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RT-Thread的CPU占用率查看

2019-07-07 15:52:48  阅读:269  来源: 互联网

标签:RT count total rt usage tick 占用率 CPU


今天看到朋友的博客,他在描述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占用率。

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

标签:RT,count,total,rt,usage,tick,占用率,CPU
来源: https://www.cnblogs.com/li-23/p/11146438.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有