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

打开电脑的任务管理器,看着跳动的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使用情况是不同的,原因就在于操作系统本身的消耗!

本篇主要从整体介绍系统CPU使用率是什么鬼,下篇笔记将在rt-thread系统上为大家实操一番,这样既能把握概念,也能掌握细节,这才是学习的节奏嘛。

来源:鱼鹰谈单片机


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图解,C语言希尔排序

希尔排序和插入排序很相似,有点像插入排序的升级版本。希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序&…

TQ210——S5PV210串口通信

TQ210——S5PV210串口通信 1、 串行与并行通信 串行通道中,有效信息被编码后串行的从单根传输线上传送出去。譬如发送ASCII字符’a’,我们可以将’a’对应的ASCII码97(0x61)分作8个bit在传输线上顺序依次传输。 与串行传输相对应…

暴力字符匹配算法的C语言实现

1、聊一聊今天跟大家分享的这个曲子一般是在天气预报和英语试听中出现,不信你听一听绝对有种似曾相识感觉。本篇文章主要是为讲解高效字符匹配算法的一则预告文,跟大家讲讲暴力字符匹配算法以及匹配算法在通信中如何使用。2、暴力匹配算法介绍1聊聊字符匹…

TQ210 —— LCD

TQ210 —— LCD一、LCD控制器1、S5PV210 LCD控制器要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是…

微信表情都戒烟了

昨天看到最新的微信表情是这样的原来的抽烟表情被替换成了这释放出一个信号,就是「抽烟不酷了」不过我想说,只戴着一个绿帽子,嘴巴里面什么都没有,好像也不酷啊。难道重点就是那个墨镜?????不过,在PC版…

Python 类的属性和实例属性 Python 的动态语言

#定义一下类, 含有类属性 aaa, >>> class Aa: ... aaa 10... #对类 Aa实例化出一个实例 a1>>> a1 Aa() >>> print(a1.__dict__)#查看实例并没有自己的方法和属性{}>>> a1.aaa #但是这个实例在调用属性的时候, 发现自己没有这个属性, 于…

高效KMP字符匹配算法就这么简单

1、聊一聊上一篇文章"暴力"字符匹配算法的C语言实现2、KMP算法介绍1KMP介绍KMP是一种字符匹配算法,为啥叫KMP呢?因为是由D.E.Knuth,J.H.Morris和V.R.Pratt大佬提出来的。那一些小伙伴会问了怎么不叫"DJV算法"呢?因为老外…

TQ210 —— NandFlash

TQ210 —— nandflashTQ210 开发板板载一片 1Gbyte 的 NAND FLASH——K9K8G08U0B,通过查询K9K8G08U0B 芯片手册可以得到如下信息:(理论知识不再介绍)K9K8G08U0B : (1G 32M) x 8bit 总大小Data Register : (2K 64) x 8bit 数据寄…

涂鸦赞助的500个开发套件,先到先得

来源 | 涂鸦跟涂鸦申请的福利,给喜欢开发的同学发放开发套件,只要是不是专门白嫖党,数量可以不做限制。去年疫情突发,封城、封小区以及人员隔离,让原本享受千般宠爱的主子们变成了靠吃猫砂、塑料袋度日的小可怜&#x…

Linux-C 编程 / 网络 / 超迷你的 web server

一、为生活寻找固定的支撑点1. 什么是生活的支撑点?让自己感到些许痛苦,但却会带来实实在在的充实感和成就感的事情。举个栗子,我的支点是运动、看书、研究技术。2. 固定的支撑点很重要:三个固定的要素:时间 / 空间 / …

20165326 java第四周学习笔记

第四周学习笔记 ch5 子类和父类子类只能有一个父类使用关键字extendsyclass 子类 extends 父类系统默认的祖先类Object(java.lang包中)继承:子类继承父类的方法可以直接作为实例方法调用,继承的成员变量和方法的访问权限不变&…

用VSTS进行网站压力测试

VSTS提供了一个丰富、强大的工具平台,融合了软件开发领域的各个角色,涵盖软件开发生命周期的各个阶段,包括设计,开发,测试,管理,而这一整套构件的融会贯通,让它可以有效地改善软件开…

第四周选做作业

相关知识点的总结 通过命令行引入参数递归循环课上内容的补做,结果截图 未完成内容:递归与循环 补做教材第二章,第三章编程题目 参考资料 2016-2017-2 《Java 程序设计》课堂实践项目编写一个Java应用程序,输出全部的希腊字母。_百度知道[]转载于:https:…

数据结构和算法,也就那么回事儿

金三银四来了,各大厂动静不小,都在储备人才,绝对是程序员面试的黄金时间了,不少同学也在后台反馈面试中遇到的一些问题,所以今天想跟大家说说算法。说起算法,那大厂面试是绝对必考的,可以说是一…

SecureCRT护眼设置

SecureCRT护眼设置Option —— Global Options —— Terminal —— Appearance —— ANSI COlor从左至右,从上至下值分别为(RGB元组): 1:(0,43,53) (128,128,0) (0,160,0) (160,160,0) (255,128,128) (…

北美暴风雨,Linux5.12被延迟6天发布

上个月中旬,因为罕见的严寒天气和暴风雪,美国得州和俄勒冈州波特兰遭遇了持续多天的停电。Linux 创始人 Linus Torvalds 就生活在波特兰,多年来他一直在家中远程工作,并负责新内核的最终发布。之前我们报道过,内核社区…

C#复习笔记(3)--C#2:解决C#1的问题(可空值类型)

可空值类型 C#2推出可空类型来表示可以为null的值类型。这是一个呼声很高的需求,因为在常用的数据库中都是允许某些值类型可为空的。那么为什么值类型就不能为空呢?内存中用一个全0的值来表示null,但是全0的地址说明了这个内存空间是被清除了…

ISA之三种客户端访问

我们已经懂得怎么搭建ISA2006.我们今天来利用ISA访问外网!顺便说声如果你IP,网关,DNS什么都没问题。那么你可以看看你的NAT处理!下面我们看看我们的试验拓扑!我们在ISA的服务器上做访问规则!来允许我们可以…

面试官不讲武德,居然让我讲讲蠕虫和金丝雀!

1. 蠕虫病毒简介2. 缓冲区溢出3. 缓冲区溢出举例4. 缓冲区溢出的危害5. 内存在计算机中的排布方式6. 计算机中越界访问的后果7. 避免缓冲区溢出的三种方法7.1 栈随机化7.2 检测栈是否被破坏7.3 限制可执行代码区域8. 总结蠕虫病毒是一种常见的利用Unix系统中的缺点来进行攻击的…

asp.net core 拦击器制作的权限管理系统DEMO

效果图 没有登陆不会执行请求日期的方法&#xff0c;不管是否登陆都不允许访问请求时间方法 验证不通过是会进行转发到Home/error方法中&#xff0c; 代码附上&#xff1a; [Route("[controller]/[action]")]public class HomeController : BaseController{/// <s…