开什么节什么的成语| 布病吃什么药| 痕迹是什么意思| 维生素b是什么| 什么地走| 什么是梅雨季节| momax是什么牌子| 黑绿色大便是什么原因| 子宫脱落有什么症状| 痱子粉什么牌子好| 长公主是什么意思| 窥见是什么意思| 长痘不能吃什么| 叶酸什么时候吃| 牙龈肿痛挂什么科| 57年的鸡是什么命| 1988年属什么| 左侧后背疼是什么原因男性| 信指什么生肖| 管教有方是什么意思| 3.14什么星座| 看嗓子去医院挂什么科| 劳动的反义词是什么| 什么鬼什么神| 六月八号什么星座| 痛风石是什么| 奥美拉唑治什么胃病| 鲨鱼是什么动物| 心脏官能症吃什么药| 什么鸡没有翅膀| 门牙旁边的牙齿叫什么| 胸腔积液叩诊什么音| 孕妇不吃饭对胎儿有什么影响| 什么的威尼斯| 0是偶数吗为什么| 渗透压低是什么意思| 心脏肥大吃什么药好| ml 什么意思| 斗鱼吃什么食物| 睡美人叫什么名字| 不孕为什么要查胰岛素| 痛风用什么药| 认命是什么意思| 泄身是什么意思| 靖国神社是什么| 身份证最后一位x是什么意思| 夏天为什么不能喝红茶| 引产是什么意思| 安抚奶嘴什么时候戒掉| lookbook是什么意思| 中午12点半是什么时辰| saba是什么药| 腐是什么意思| 仰角是什么意思| 今天农历什么日子| 85年属于什么生肖| 甲亢吃什么盐好| 绿松石是什么| 为什么会得甲亢| 阴茎破皮擦什么药| 嘴唇起泡是什么火| 密云有什么好玩的地方| 去脂肪粒最有效的药膏叫什么| 孕妇吃什么蔬菜对胎儿好| 直男是什么意思| 什么时候有胎心胎芽| 断肠草长什么样| jumper是什么衣服| 有结石不能吃什么东西| 三朵花代表什么意思| 减脂吃什么主食| 1955属什么生肖| bally属于什么档次| 多发纳氏囊肿是什么意思| 下午四点到五点是什么时辰| 10月什么星座| 精疲力尽是什么意思| 牙签肉是什么肉| 梦见死去的亲人是什么意思| 房性逸搏心律是什么意思| 簸箕是什么| 右手手指头麻木是什么病的前兆| 除湿气喝什么茶| 补脑吃什么食物| 为什么感冒会流鼻涕| 为什么活得这么累| 心力衰竭吃什么药最好| 蓝什么什么| 为什么老是掉头发特别厉害| 5.23是什么星座| 一鸣惊人指什么生肖| 头疼是因为什么| 受精卵着床有什么症状| 酒品是什么意思| 白带过氧化氢阳性什么意思| 乔治阿玛尼和阿玛尼有什么区别| 辐照食品什么意思| 心绞痛是什么原因引起的| 手机为什么会发热| 早餐吃什么好| 银耳为什么助湿气| 宫闱是什么意思| 潘驴邓小闲什么意思| 算力是什么| 合集是什么意思| 踮脚走路有什么好处| 白头翁是什么| 磁共振是检查什么的| 肚子疼应该挂什么科| 为什么会突然打嗝| 妈宝男什么意思| 托班是什么意思| 夜间胃痛是什么原因| 匹维溴铵片治什么病| 胃炎伴糜烂吃什么药效果好| 大便是红色的是什么原因| 农历六月初七是什么星座| 吃火龙果有什么好处| 抓龙筋什么意思| 看嗓子去医院挂什么科| 胎儿fl是什么意思| 刚怀孕吃什么好| 空调出现pl是什么意思| 糖耐筛查主要检查什么| 一会硬一会软什么情况| 为什么新疆人不吃猪肉| 空调长时间不用再开注意什么| 说话不清楚是什么原因导致的| 四个火念什么| 什么大叫| 眼睛模糊用什么药好| 王字加一笔是什么字| 养肝吃什么好| 音字五行属什么| 第一磨牙什么时候换| 长白眉毛是什么征兆| 不完全性右束支传导阻滞是什么意思| 西瓜吃了有什么好处| 跳楼是什么感觉| ab是什么| 黑绿色大便是什么原因| 玉米须能治什么病| 维酶素片搭配什么药治萎缩性胃炎| 69是什么意思| 踩雷是什么意思| 苦瓜为什么是苦的| 贵阳有什么特产| 孔雀的尾巴像什么| 爱出汗的人是什么原因| 为什么感冒喝白酒好了| 唐僧真名叫什么| 好事多磨是什么意思| 血小板低吃什么好补| 后背疼是什么原因引起的| 胃气胃胀吃什么药最好| 虎父无犬子什么意思| 肩袖损伤吃什么药效果最好| 尿急尿频吃什么药| 小孩办理护照需要什么材料| 如花似玉什么意思| 小腿发凉是什么原因造成的| 舍是什么结构| 孕晚期羊水多了对宝宝有什么影响| 白色配什么颜色好看| v8是什么| 吓得什么填空| 房颤是什么病| 塑胶厂是做什么的| omega3是什么意思| tablet是什么意思| 啤酒是什么酿造的| 年少有为什么意思| 肠胃不好拉肚子吃什么药| 回民为什么不吃猪| 可乐不能和什么一起吃| 山本耀司的品牌叫什么| 乙肝对身体有什么影响| 既视感是什么意思| 淼念什么| 手指僵硬暗示什么疾病| 穿匡威的都是什么人| 画龙点睛是什么生肖| 双鱼男喜欢什么样的女生| 填充鼻子最好的材料是什么| 着痹是什么意思| 风湿什么药好| 引以为傲是什么意思| 晚上扫地有什么说法| 林彪为什么出逃| gm墨镜是什么牌子| 服软是什么意思| 小孩咳嗽有痰吃什么药| 肾湿热吃什么中成药| 胰腺炎是什么| 什么的葡萄| 早上屁多是什么原因造成的| 2月20是什么星座| 隐忍是什么意思| 冠字五行属什么| 畈是什么意思| 中子是什么| 天津有什么玩的| 玻璃水是干什么用的| m0是什么意思| 六月底是什么星座| exp是什么日期| 过敏挂什么科| 砚是什么东西| 需要一半留下一半是什么字| 白带有腥味是什么原因| 腊肠炒什么好吃| 均码是什么意思| 热得什么填空| 津津有味什么意思| 什么是脂溢性皮炎| 莫名其妙的名是什么意思| 触不可及什么意思| 女右眉毛跳是什么预兆| 莲花有什么寓意| 心电图窦性心律不齐是什么意思| 什么颜色属水| lok是什么意思| 东北和山东有什么区别| 甲状腺结节挂什么科| 意识是什么| 境字五行属什么| 卤牛肉用什么部位| 天时地利人和什么意思| 岂是什么意思| 水痘能吃什么食物| 甲状腺功能亢进吃什么药| 补锌吃什么药| 大腿外侧是什么经络| 背部痒是什么原因| 调教是什么| 游字五行属什么| 玉米淀粉可以做什么| 抑郁是什么意思| 结婚六十年是什么婚| 血脉是什么意思| 过敏看什么科室| 两个克念什么| 尿道炎吃什么消炎药| 扫兴什么意思| 甲减饮食需要注意什么| 舌头有齿痕是什么原因| 口苦口臭吃什么药效果最佳| 黑色代表什么| 眼袋浮肿什么原因| acc是什么意思| 狐仙一般找什么人上身| 十一月十五号是什么星座| 右耳鸣是什么原因| 双肺纤维条索是什么意思| 肾结石是因什么而起| 早起的鸟儿有虫吃是什么意思| 营养素是什么| 灰喜鹊吃什么| 2019年属什么生肖| 梦到自己掉头发是什么预兆| 女人更年期是什么症状| 白牡丹是什么茶| 献血对身体有什么好处| 河蟹吃什么| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 嵌入式开发 ? STM32 ? 嵌入式开发中的程序架构

共1条 1/1 1 跳转至

嵌入式开发中的程序架构

高工
2025-08-04 10:44:12     打赏
百度 无能力支付患者必须具备下列情形之一:持有民政部门核发的城乡低保对象、特困救助供养人员等证件或证明,由公安、民政等部门确认的流浪乞讨人员;持有居住地村(居)委会出具并经乡镇(街道)人民政府(办事处)审核盖章确认的收入低下、基本生活困难证明。

前言

    在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。

    软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发。

    我相信在嵌入式或单片机软件开发的初期大多数开发者采用的都是简单的前后台顺序执行架构(我就是这样的)。在嵌入式软件开发中,程序架构主要分为三种,本篇文章将对这三种程序架构做出详解。

软件架构存在的意义

    可以说一个好的程序架构,是一个有经验的工程师和一个初学者的分水岭。软件架构对于开发人员是友好的,你希望先执行什么任务后执行什么任务,或者这一个时间点执行什么任务下一个执行什么任务,又或者什么事件会同步到某个任务等等,在不同的软件架构下,解决上述问题的具体方法都是有所区别的。

    软件架构对开发者最大的帮助是:帮助开发者掌控整个工程的框架,当你熟练使用其中某一个程序架构后,对于系统中出现的bug你一定能够快速的定位并解决。当然,我建议要根据需要选择合适的软件架构进行开发,具体原因在文章后面会进行介绍。

深入介绍三种不同的程序架构

    三种常用的软件架构有:顺序执行的前后台系统、时间片轮询系统和多任务操作系统。为了让大家有一个更为清晰的认识,我分别用三种软件架构对一个实例进行介绍说明。这个实例如下:它有4个任务,这4个任务为按键扫描、声光报警、显示屏刷新和超声波测距。这个实例的具体功能是通过按键设置测量距离的阈值,当测距距离低于设置的阈值时,触发声光报警并且将测量距离实时显示在显示屏上(这个应用是汽车倒车雷达的具体体现)。

1 顺序执行的前后台系统

    在顺序执行的前后台系统中,我会把键盘扫描用查询的方式放在while(1)中,而显示屏刷新和超声波测距使用中断,在中断服务函数中获取测量距离后进行显示,在主函数的循环中进行按键的检测,声光处理也放在主循环中。这样整个程序就以变量标志的同步方式在主循环和后台中断中执行,对应的程序代码如图所示:

image.png

    上面代码是顺序执行前后台系统的主函数。

image.png

    如上代码,顺序执行前后台系统的中断服务函数。

    这种架构的优点是使用简单易于理解,而缺点是每个任务所占的CPU时间过长的话,会导致程序的实时性能差,就比如按键的检测等。

2 时间片轮询系统和多任务操作系统

    时间片轮询法实际上通常出现在操作系统中,也就是说他属于操作系统,但在这里所说的是基于前后台系统的时间片轮询。

    时间片轮询法的实质其实就是选出一个定时器,每进一次定时中断对计数值进行自加,在主循环中根据这个计数值执行任务,这个计数值也就是任务轮询的时间片。

    在这个实例中,如果采用时间片轮询系统的话,首先选用主控芯片的任一定时器,定时器定时时间周期由我们决定,为了保证实时性和运行效率,这个值通常取10ms、30ms、50ms等,我会将按键扫描轮值值设置为20ms,因为按键抖动的时长一般为20ms,这样处理既达到了消抖的目的,又不会漏掉按键的检测。

    而显示屏的刷新设置为30ms,如果你觉得刷新反应慢了也可以修改这一轮询值得到改善;而超声波测距的轮询值设置为100ms,即每隔100模式触发测距一次,这个测距频率已经能够满足大多数的情况了。

    程序代码如下:

image.png

    如上代码,时间片轮询系统的主函数。

image.png

    如上代码,时间片轮询系统的定时器中断函数。

    可以看出时间片轮询法相比顺序执行还是有很大优势的,既有顺序执行法的优点,也有操作系统的部分优点。

3 多任务操作系统

    操作系统的本身是一个比较复杂的东西,任务的管理和调度实现的底层是很复杂和困难的。

    但是,我们一般都是把操作系统本身作为一个工具一个平台,我们的目的是使用它的功能而不是开发一个操作系统。

    我使用过ucos和freertos小型的实时操作系统,也使用过Linux大型的操作系统,有了操作系统,不管是对于程序的稳定性和开发的效率都会好很多。

    我们在使用操作系统的时候更多的需要去学习和理解它的一些调度和通信的方式。

    实际上真正能使用操作系统的人并不多,反而是跑裸机的占大多数,这也和产品的具体要求有关,很多简单的系统只需要裸机即可满足。

    在这里本我不过多的介绍操作系统本身,因为操作系统确实挺复杂的,下面图例中的代码是在freertos中创建按键控制LED亮灭的程序结构,大家可以对比一下:

1750646617538.png

    如上,freertos多任务系统中主函数。

1750646630086.png

    如上,freertos多任务操作系统中的任务回调函数。实际上还有一些STM32框架可以实现操作系统的功能,参考此文:一种STM32框架,实现RTOS的部分功能

如何选择合适的软件架构

    我使用过多种不同MCU做项目开发,例如:STM32、STC15、新唐等,也接触过复杂的设计需求,例如:车载智能系统和智能家居,跑过操作系统ucos、freertos和Linux等等,在回到裸机开发时,就会不然而然的去思考完整系统的软件架构的设计问题,相信在读者中开发裸机的也占大多数。

    我认为没有最好的软件架构(程序架构),而是只有最合适的。因为在不同的应用场景中适合采用不同的程序设计,而单纯的去比较哪种程序架构是最好的没有什么实际的意义。

    那接下来我们来对具体的应用场景进行分析:

在一些逻辑清晰功能单一的系统中就很适合选择顺序执行的前后台架构,这个软件架构往往能够满足我们大部分的需求,比如电饭煲、电磁炉和声控灯泡等;

在一些资源缺乏的单片机并且对系统可靠性要求较高的情况下非常适合,因为这种方法的系统耗费比较小,只是牺牲了一个定时器而已,但是选择此种程序架构需要我们对时间片进行深思熟虑的划分;

最后,在一些功能复杂,逻辑控制较为困难的系统中就适合选择多任务操作系统,比如视频监控系统、无人机等等应用场景。

    作为嵌入式软件工程师,掌握这三种软件架构是非常有必要的,它们可以让我们在设计程序时拥有更多的选择和思考,而每一种不同的程序架构都具备它自己的优势与不足,这需要我们去用心实践方可体会到它的奥妙。





关键词: 嵌入式     程序     架构    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
什么哈欠 糖醋里脊是什么肉 武则天是什么朝代 齿加禹念什么 cpf是什么意思
情人节送什么 青蛙爱吃什么 阿耨多罗三藐三菩提是什么意思 龙的九个儿子都叫什么名字 不明觉厉是什么意思
南瓜可以做什么美食 名落孙山是什么意思 绦是什么意思 什么检查需要空腹 甲状腺激素高吃什么药
羟基丁酸在淘宝叫什么 祖字五行属什么 米黄是什么颜色 吃什么补肾 火焰山为什么这么热
权志龙的团队叫什么hcv8jop5ns5r.cn 醋精和白醋有什么区别hcv8jop1ns5r.cn 蓟是什么意思hcv8jop8ns7r.cn 疥疮是什么原因造成的hcv7jop6ns7r.cn guess是什么意思hcv8jop8ns9r.cn
炖鸡放什么材料hebeidezhi.com 为什么会感染幽门螺旋杆菌hcv9jop2ns0r.cn 好麻吉是什么意思hcv7jop7ns3r.cn 血常规24项能查出什么病hcv9jop2ns8r.cn 1988年是什么生肖hcv9jop6ns1r.cn
纷乐是什么药hcv9jop5ns9r.cn 烧心吃什么药hcv9jop1ns5r.cn 补气是什么意思hcv9jop8ns0r.cn 痔疮是什么原因引起的hcv8jop9ns3r.cn 令公子车祸隐藏了什么hcv9jop3ns9r.cn
急性肠胃炎用什么药hcv8jop5ns7r.cn 2月3日什么星座gysmod.com 菜心是什么菜hcv9jop1ns6r.cn 耳朵疼痛吃什么药hcv9jop5ns7r.cn 提踵是什么意思hcv8jop3ns2r.cn
百度