打印
[应用方案]

单片机里面的CPU使用率是什么?

[复制链接]
2055|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenci2013|  楼主 | 2024-2-24 17:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
打开电脑的任务管理器,看着跳动的CPU使用率,发现很舒服。每一个线程占用了多少CPU清清楚楚,也就能针对性的确认为啥你的电脑跑的慢了。


今天这篇笔记不讲每个任务(或线程)CPU的使用情况,而是单片机整体的CPU使用情况,先易后难嘛。
为什么要知道这个呢?知道这个有啥用呢?鱼鹰看的书少,就不写官方话了,只说说自己的理解。
CPU使用率越高,意味着系统越繁忙,对于一些事情的响应也就越慢。比如你的电脑CPU使用率占到90%以上,你会发现打字变慢了,鼠标移动变慢了,这都是因为CPU占用过高,导致系统来不及处理你的键盘和鼠标数据,所以才会有慢悠悠的表现。
电脑是非实时系统,要求不高,即使电脑变慢,电脑死机,后果都不是很严重,但是如果说你的嵌入式系统是国防、医疗领域的,如果也出现了这些情况,那后果不堪设想。比如呼吸机突然出问题了,那么对于病人来说,就是灾难,所以医疗行业的产品都会经过严格的测试,否则不允许上市。
嵌入式系统使用的大部分应该都是实时操作系统,即所谓的RTOS,它必须对外界的各种情况作出非常快的响应,如果不能,那你设计的系统就是有问题的。
那么如何快速响应外界信息呢?就看CPU使用情况了,CPU平时的使用率越低,越能快速响应。怎么理解这句话?
比如一天时间里,你要上8个小时的班,其他时间才属于你自己,如果按一天来计算的话,你的CPU利用率是8/24=33.3%,其他时间可以快速响应其他事情,比如别人叫你出去吃饭,如果是在下班时间,你随叫随到,如果是上班时间,那么叫了你也没用,只能等下班之后才行。所以虽然你的CPU利用率才33.3%,但是上班的时候还是不能及时响应其他事情,因为上班是优先级最高的任务(假设上班是最高优先级任务)。
这个例子可能不是很好,换成学生的例子可能更好一些。比如一个学生,每天上7节课,课间都有休息时间,假设还是要上8小时,但是因为中间不是连续的,所以虽然你的CPU利用率还是33.3%,但是你在课间时总能对一些其他事情做出快速响应,所以整体性能可能比前一个例子好一些。
所以设计系统时,千万别让一个高优先级任务持续占用CPU太长时间,如果可能的话,尽可能拆分长任务,否则低优先级的任务很可能无法及时运行,外在表现是,系统卡了。
看完这个,很多人就会想了,我的系统该怎么计算CPU使用率呢?对了,我的系统是裸机的……
不好意思,裸机系统CPU使用率100%,算不了……
那好,带操作系统的怎么算,比如uCOS、FreeRTOS、RT-Thread?
严格来说,如果不采用休眠等机制的话,不管是裸机还是操作系统,CPU使用率都是100%。
为什么这么说呢?你看系统的CPU使用率的计算方法就知道了(这里说的是RTOS中简单的计算方式,而不是电脑那种,那种计算应该比较复杂,鱼鹰也不清楚)。
简单的说,一个操作系统里有很多用户任务,还有一个特别的系统任务,就是空闲任务。这个任务平时啥也不敢,就在那里空跑,CPU没有其他任务执行的时候,就会跑到空闲任务中执行。
除了空跑,空闲任务还有什么特点?优先级最低,不允许挂起空闲任务,即该任务***处于就绪状态。
正因为这些特点,它变得非常特殊,也是我们能够计算CPU使用率的核心所在。
说白了,所谓的CPU使用率计算,就是先计算空闲任务的运行时间,然后反推其他任务的运行时间。
比如说,1秒时间内,空闲任务运行了700毫秒,那么空闲任务的CPU使用率是70%,反推一下,其他任务的使用率就是30%。但是特别注意的是,这里说空闲任务运行700毫秒,不是说空闲任务持续不断的运行了700毫秒,而是中间穿插了其他任务的执行,中间穿插就是300毫秒执行其他任务的时间。
看这个图就清楚了:


事实上,1秒时间内的任务切换远比上图显示的要多的多,只是为了更好的说明,才没画那么多切换过程。
真正好的系统,一个任务不会长时间占用CPU,而是会不停的主动交出使用权,像上图任务2有100毫秒的占用,如果这个是高优先级任务,那么低优先级的任务的响应肯定在100毫秒以上了。
当然,如果说这个响应时间满足设计要求,那么在系统任务数比较少的情况下,倒是无所谓的事情。
可能你还有疑惑,你怎么不说说空闲任务啊,空闲任务有长达300毫秒的CPU占用哩!
不好意思,真不需要说它,因为它的优先级任务最低,所以如果说它能在300毫秒内持续运行,那肯定是因为没有其他任务需要处理才会让空闲任务一直运行的。
为什么这么说呢?因为在操作系统中,除了主动切换任务外,还有被动切换一说。
所谓主动切换任务,就是任务本身认为自己执行完了,然后自己主动调用系统函数进行切换,比如系统延时函数等;而被动切换有所不同,被动切换是时时刻刻都在发生的,只要满足条件,那么你的任务可能还没有完全执行完毕,就可能切换到其他任务先执行了。
怎么理解呢?假如四个人组成一个小组讨论问题,其中一个是小组长(操作系统),小组长有绝对发言权,可以随时打断其他成员(任务)的发言,所以当组员发言时,他每隔几分钟都会检查一下,看看谁举手准备发言,一旦发现有等级高的成员举手,那么不管目前发言的组员是否发言完毕,小组长都会立刻让高等级的组员先发言,等他发言完毕,才会让之前未发言完成的组员继续发言。这样可能不是很人性,但是确实能保证高效!


在上面这张图中,其实还有一个非常重要的东西没有画出来,那就是操作系统每隔一段时间对就绪任务的检查。在操作系统中,这种检查工作一般是由定时中断完成的(stm32中有专门为操作系统准备的定时中断,即SysTick)。
中断是凌驾于所有任务(或线程)之上的超级任务。
但是检查时间(即中断时间)也是有讲究的,如果检查时间过短,那么整个系统就会忙于切换任务,花费在任务切换的时间占比就会很大;而检查时间过长,那么高优先级任务就不能得到更快速的响应,所以这个时间一定要谨慎选择。
一般来说,任务切换CPU占比在1%以内应该是比较好的(这个没有理论依据哈,鱼鹰瞎写的),即如果各个任务只调用一个延时函数,如果你的CPU占用在这个范围,那么就是比较合适的。
当你学会了CPU使用率计算,不如尝试着修改中断时间,你会发现不同的中断时间,CPU使用情况是不同的,原因就在于操作系统本身的消耗!

使用特权

评论回复
沙发
iyoum| | 2024-3-1 21:57 | 只看该作者
在单片机中,"CPU使用率"这个概念与在个人电脑或服务器中的CPU使用率有所不同。

使用特权

评论回复
板凳
linfelix| | 2024-3-1 23:15 | 只看该作者
单片机里面的CPU使用率通常指的是CPU在单位时间内工作的时间占总时间的比例。

使用特权

评论回复
地板
i1mcu| | 2024-3-2 19:35 | 只看该作者
对于实时操作系统(RTOS)支持的单片机,CPU使用率可以通过操作系统提供的统计功能来获取,通常通过跟踪任务切换、中断处理等事件的时间来估算。在裸机系统中,可能需要自行编写代码来监测和计算CPU使用率。此外,在单片机系统中,由于其任务调度和执行的特殊性,CPU使用率的计算可能还包括对中断处理时间、空闲任务运行时间等因素的考虑。

使用特权

评论回复
5
updownq| | 2024-3-2 20:10 | 只看该作者
如果1秒时间内,空闲任务运行了700毫秒,那么空闲任务的CPU使用率是70%,反推一下,其他任务的使用率就是30%。

使用特权

评论回复
6
iyoum| | 2024-3-3 14:26 | 只看该作者
单片机(MCU)中的CPU使用率是指在一定时间周期内,CPU执行实际任务所占用的时间与该时间段总时间的比率。它反映了CPU忙碌程度和工作效率,是衡量单片机系统资源紧张程度的一个重要指标。

使用特权

评论回复
7
sanfuzi| | 2024-3-3 17:29 | 只看该作者
优化代码以减少每条指令的执行时间。

使用特权

评论回复
8
elsaflower| | 2024-3-3 17:43 | 只看该作者
在某些情况下,工程师可能会采取措施来降低CPU使用率,例如通过优化代码、减少中断频率、使用低功耗模式等方式,以提高系统的整体性能和能效。

使用特权

评论回复
9
pixhw| | 2024-3-3 19:37 | 只看该作者
如果一个单片机在一秒钟内有700毫秒用于执行实际任务,其余300毫秒处于空闲状态,则CPU使用率为70%。

使用特权

评论回复
10
louliana| | 2024-3-3 20:14 | 只看该作者
在单片机中,CPU使用率通常不是以百分比的形式来表示的,因为单片机通常执行的是固件程序,而不是多任务操作系统中的多个进程。

使用特权

评论回复
11
xiaoyaodz| | 2024-3-4 12:08 | 只看该作者
高CPU使用率可能意味着单片机正在有效地执行任务,而在其他情况下,高CPU使用率可能意味着程序存在性能问题或资源分配不均衡。

使用特权

评论回复
12
nomomy| | 2024-3-5 09:38 | 只看该作者
在单片机系统中,CPU可能需要执行各种任务,包括但不限于控制输入输出设备、处理传感器数据、执行算法、驱动显示器等。CPU使用率计算公式大致为:

CPU使用率 = (执行任务时间 / 总时间) × 100%

使用特权

评论回复
13
nomomy| | 2024-3-5 16:12 | 只看该作者
了解CPU使用率对于评估单片机的性能、优化程序和提高系统效率具有重要意义。

使用特权

评论回复
14
tifmill| | 2024-3-5 21:03 | 只看该作者
在单片机的上下文中,CPU使用率的计算通常涉及到对空闲任务和非空闲任务(即用户定义的任务)的运行时间的统计。具体来说,CPU使用率的计算方法是先计算出在给定时间内空闲任务的运行时间,然后用这个时间来推算其他任务占用的CPU时间。

使用特权

评论回复
15
sdlls| | 2024-3-7 21:18 | 只看该作者
具体来说,CPU使用率通常是指在一段时间内(如1秒),CPU花在执行用户任务上的时间与总时间的比例。如果CPU大部分时间都在执行任务,那么使用率就会很高;反之,如果CPU经常处于空闲状态,那么使用率就会较低。例如,如果在1秒内有700毫秒的时间CPU都在执行空闲任务,那么CPU的使用率就是30%,因为非空闲任务占用了300毫秒的时间。

使用特权

评论回复
16
sesefadou| | 2024-3-8 21:05 | 只看该作者
单片机中的CPU使用率是一个反映处理器工作负荷的指标,它表示CPU在执行任务时活跃程度的一个百分比。CPU使用率越高,意味着CPU在处理更多的任务,反之则表示CPU有更多的时间处于空闲状态。

使用特权

评论回复
17
bestwell| | 2024-3-11 22:16 | 只看该作者
CPU使用率是衡量单片机中CPU活跃程度的一个指标,它表示在特定时间内CPU执行非空闲任务的时间占总时间的比例。

使用特权

评论回复
18
yorkbarney| | 2024-3-15 21:26 | 只看该作者
CPU使用率并不能完全反映单片机的性能。

使用特权

评论回复
19
loutin| | 2024-3-16 12:42 | 只看该作者
在单片机或嵌入式系统中,CPU使用率的计算通常是基于操作系统的任务调度机制。如果有操作系统的支持,可以通过系统函数来获取当前的CPU使用率,这个值是动态变化的,反映了当前系统的负载情况。

使用特权

评论回复
20
wilhelmina2| | 2024-3-17 13:47 | 只看该作者
单片机中的CPU使用率更多地是指CPU忙碌的程度,或者更准确地说,是CPU执行指令的速度和频率。在单片机编程中,开发者会尽量优化代码,以提高CPU的效率,这意味着在给定的时间内完成更多的任务。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

108

主题

6385

帖子

4

粉丝