《《《《《正文》》》》》
《裸机系统》
裸机系统通常分成轮询系统和前后台系统,有关这两者的具体实现方式请看下面的讲解。
1、轮询系统
轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情,大概的伪代码具体见代码清单 5-1。轮询系统是一种非常简单的软件结构,通常只适用于那些只需要顺序执行代码且不需要外部事件来驱动的就能完成的事情。在代码清单 5-1 中,如果只是实现 led 翻转,串口输出,液晶显示等这些操作,那么使用轮询系统将会非常完美。但是,如果加入了按键操作等需要检测外部信号的事件,用来模拟紧急报警,那么整个系统的实时响应能力就不会那么好了。假设dosomething3 是按键扫描,当外部按键被按下,相当于一个警报,这个时候,需要立马响应,并做紧急处理,而这个时候程序刚好执行到 dosomething1,要命的是 dosomething1需要执行的时间比较久,久到按键释放之后都没有执行完毕,那么当执行到 dosomething3的时候就会丢失掉一次事件。足见,轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低。
2、前后台系统
相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称为前台,main 函数里面的无限循环我们称为后台,大概的伪代码见代码清单 5-2。
《多线程系统》
相比前后台系统,多线程系统的事件响应也是在中断中完成的,但是事件的处理是在线程中完成的。在多线程系统中,线程跟中断一样,也具有优先级,优先级高的线程会被优先执行。当一个紧急的事件在中断被标记之后,如果事件对应的线程的优先级足够高,就会立马得到响应。相比前后台系统,多线程系统的实时性又被提高了。多线程系统大概的伪代码具体见代码清单 5-3。
相比前后台系统中后台顺序执行的程序主体,在多线程系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们称之为线程。每个线程都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。加入操作系统后,我们在编程的时候不需要精心地去设计程序的执行流,不用担心每个功能模块之间是否存在干扰。加入了操作系统,我们的编程反而变得简单了。整个系统随之带来的额外开销就是操作系统占据的那一丁点的 flash 和 ram。现如今,单片机的 flash 和 ram 是越来越大,完全足以抵挡 rtos 那点开销。
无论是裸机系统中的轮询系统、前后台系统和多线程系统,我们不能一锤子的敲定孰优孰劣,它们是不同时代的产物,在各自的领域都还有相当大的应用价值,只有合适才是最好。有关这三者的软件模型区别具体见表格 5-1。
三星或将摆脱高通束缚_自研GPU再曝光
数控编程G代码详解分享
人脸识别技术的到来,温州多家医院实施刷脸看病
能超过亚马逊Kiva机器人的智能机器人系统来了
光伏产业链下半年供需展望,尺寸之争后遗症开始显现
从0到1教你写RT-Thread之裸机系统与多线程系统
基于Cr2C的面内双势垒磁性隧道结中的巨遂穿磁阻
高维空间逼近最近邻评测
一文看懂keil4和keil5最大区别
通信系统内部产生EMI的原因以及消除EMI的方法介绍
江波龙Mini SDP首次突破行业想象,主控、缓存和闪存三合一
BGA矩阵整体推力试验机能进行哪些测试?
不同种类的二极管如何替换
虎牙提交IPO:拟筹资2亿美元
万元以内的百吋4K激光电视,含菲涅尔柔性屏
5G与云网融合赋能产业新未来的发展趋势
LED照明进入势力消长期
CD1502驱动程序详细讲解过程及源码
安泰ATG-2021B功率信号源在超声无损检测研究中的应用
常见的小型自动气象站的作用是什么