岁寒三友指什么| 空调滴水什么原因| 右侧卵巢内囊性回声是什么意思| strange是什么意思| 莫言是什么学历| 刑太岁是什么意思| 红细胞高说明什么| 脑供血不足检查什么项目| 何以笙箫默是什么意思| 个体户是什么职业| 白包是什么意思| no2是什么气体| 什么是荷尔蒙| 水泊梁山什么意思| 脑血管痉挛是什么症状| 鳞状上皮增生什么意思| 暑伏为什么要吃饺子| 西红柿和什么不能一起吃| 伊朗用什么货币| 人为什么打嗝| 大姨妈不来是什么原因| 讲述是什么意思| 干燥剂是什么成分| 心心相印是什么生肖| 痕迹是什么意思| 为什么天天做梦| 陈皮泡水喝有什么好处| 渣是什么意思| 身份证有什么用| 小脑梗塞会出现什么症状| pgr是什么意思| 嫖娼是什么意思| 电音是什么意思| 什么是自限性疾病| 审时度势是什么意思| mds医学上是什么意思| 盆腔炎检查什么项目| 口腔医学和口腔医学技术有什么区别| 九月二十八是什么星座| 树上长的像灵芝的是什么| bpm是什么意思| 肺火旺吃什么药| castle是什么意思| 神是什么| 感化是什么意思| 孕囊形态欠规则是什么意思| 咖啡有什么功效| 驾驶证扣6分有什么影响| 乙肝两对半和乙肝五项有什么区别| 湿气重吃什么药| 温度计代表什么生肖| 机翻是什么意思| 碳水化合物指的是什么| 乩童是什么意思| 头晕吃什么食物好| 逍遥丸治什么| 为什么一吃饭就胃疼| 血小板异常是什么原因| 便秘吃什么药没有依赖性| 吃完饭就打嗝是什么原因| 解脲脲原体阳性吃什么药| 皮肤挂什么科| 3月10日是什么星座| 更年期燥热吃什么食物| 对唔嗨住什么意思| 女人吃枸杞有什么好处| 余光是什么意思| 嗪读什么| 锻练与锻炼有什么区别| 突然肚子疼是什么原因| 音高是什么意思| 独角仙吃什么食物| 狗脚朕什么意思| 头晕想吐吃什么药| 什么菜好吃| 拜阿司匹灵是什么药| rh是什么元素| 早泄吃什么药| 梦见海水是什么意思| 剌是什么意思| 什么什么各异| 揠苗助长是什么意思| 非洲割礼是什么| 遥遥相望是什么意思| 江团鱼又叫什么鱼| 鼻尖长痣代表什么| 破军星是什么意思| 圆脸适合剪什么发型| 低聚异麦芽糖是什么| 翡翠是什么| 雾化治疗的作用是什么| 妇科衣原体感染是什么病| 身份证上x代表什么| 头晕是什么原因引起| 全身spa是什么意思| 四个又读什么| 肠粉是什么| 维生素c弱阳性是什么意思| 嘴苦是什么病的征兆| 金银花不能和什么一起吃| 颈椎病最怕干什么活| 5月28日什么星座| 郭德纲什么学历| 血红蛋白浓度偏低是什么原因| 什么时间运动减肥效果最好| 什么是湿热| 代谢慢的人吃什么有助于新陈代谢| 甲鱼和什么一起炖最好| 天秤女和什么座最配对| 雍正叫什么名字| 孕反一般什么时候开始| 经常吃维生素c有什么好处和坏处| 男人经常熬夜喝什么汤| 3月是什么星座的| 鞠婧祎什么学历| 茯苓生长在什么地方| 风采是什么意思| 当今社会什么行业前途比较好| 魔鬼是什么意思| logo是什么| 心率高是什么原因| 跑男什么时候播出| 路征和景甜什么关系| 桃李满天下是什么生肖| 怀孕后壁和前壁有什么区别| 恐惧症吃什么药最好| 腹股沟淋巴结肿大是什么原因| 口里发酸是什么原因| 扁平疣吃什么药| 兔子的耳朵有什么作用| 右侧胸口疼是什么原因| 中水是什么| 头不由自主的摇晃是什么病| 蟹柳是什么做的| 国家能源局是什么级别| 非洲讲什么语言| 什么人容易得焦虑症| 什么汤| 夏天吃什么| 正官正印是什么意思| 身上很痒是什么原因| 右手小拇指发麻是什么原因| 以纯属于什么档次| 男人为什么累| 澳门什么时候回归的| 谷丙转氨酶高吃什么药可以降下来| 桔梗是什么| 草字头下面一个高字读什么| 刀子嘴豆腐心什么意思| 女人下嘴唇厚代表什么| 排便方式改变指什么| 高密度脂蛋白胆固醇偏高是什么意思| 跑水是什么意思| 阴虚火旺有什么表现症状| 空调什么时候发明的| 头发为什么会变白| 满月针最晚什么时候打| 肝火旺吃什么药| 1999年属兔的是什么命| 猫头鹰属于什么科| 马齿苋煮水喝有什么功效| 翡翠和玉的区别是什么| 什么减肥药效果最好而且不反弹| 星星是什么的眼睛| 中元节是什么意思| 遗留是什么意思| 什么的身体| pt950是什么材质| 什么是表达方式| 天年是什么意思| 女真族现在是什么族| 焦虑症吃什么药| 蔻驰和古驰有什么区别| 属牛的跟什么属相最配| 小病不治下一句是什么| 血细胞分析能查出什么| 榴莲树长什么样子图片| 孤家寡人什么意思| 安宫牛黄丸什么时候吃| 蝉是什么生肖| 吃什么补脑子| 脂肪肝能吃什么水果| 肝脏纤维化是什么意思| 飞蛾吃什么东西| 香水edp什么意思| 白手套是什么意思| 皮肤擦伤用什么药最好| 感谢是什么意思| 促狭一笑是什么意思| 大学生村官是什么编制| 检察长什么级别| 牙龈长期出血是什么原因| 口腔溃疡什么样| 四方八面是什么生肖| 万丈深渊是什么意思| 小限是什么意思| 试管婴儿是什么意思| 动漫ova是什么意思| 金水宝胶囊有什么作用| 天蝎座和什么星座不合| 红茶什么季节喝最好| 西瓜吃了有什么好处| dhea是什么药| 小孩晚上睡觉流口水是什么原因| 公道自在人心是什么意思| 小孩子手足口病有什么症状图片| 支气管炎用什么药| 什么样的你| 技师是干什么的| 阴茎皮开裂是什么原因| 小便不利什么意思| 2月25日是什么星座| 鲮鱼是什么鱼| 晚上手脚发热是什么原因| 手脚浮肿是什么原因引起的| 鼻炎和鼻窦炎有什么区别| prada什么牌子| 告人诈骗需要什么证据| 大腿痛挂什么科| 血糖30多有什么危险| 面肌痉挛是什么原因引起的| 民航是什么意思| 属马的和什么属相最配| 洧是什么意思| 千千结是什么意思| 发炎是什么意思| below是什么意思| 摆拍是什么意思| 克感敏又叫什么| 尿酸高什么水果不能吃| 间是什么结构| 低压偏高是什么原因引起的| 鼠的三合生肖是什么| 间接胆红素是什么意思| 过敏性紫癜吃什么药| 什么火热| 头七有什么规矩| 女生胸部长什么样| 河粉是什么做的| 花椒木有什么作用与功效| 什么是考生号| 坐骨神经有什么症状| 破釜沉舟是什么生肖| 莲子有什么功效| 什么地移入| 世界最大的岛是什么岛| 秋天有什么花开| mt是什么| 全血检查能查些什么病| 小限是什么意思| swag是什么意思| 膀胱炎吃什么药最见效| 讲义气是什么意思| 这句话是什么意思| 助听器什么牌子好| 前囟门什么时候闭合| acei是什么意思| 宫内膜回声欠均匀是什么意思| 恋是什么意思| 室上速是什么病| cbg是什么意思| 烂舌头是什么原因| nmd是什么的缩写| 142是什么意思| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 嵌入式开发 ? STM32 ? 嵌入式编程模块化、驱动分离的重要性

共2条 1/1 1 跳转至

嵌入式编程模块化、驱动分离的重要性

高工
2025-08-07 09:14:48     打赏
引言百度 对于商业地产、长租公寓领域的从业者而言,如何将能够产生稳定现金流的资产进行证券化,是全行业都在探讨的问题。

    当项目小组做一个相对较复杂的工程时,意味着你不再独自单干。而是和小组成员分工合作,这就要求小组成员各自负责一部分工程。比如你可能只是负责通讯或者显示这一块。

    这个时候,你就应该将自己的这一块程序写成一个模块,单独调试,留出接口供其它模块调用。

    最后,小组成员都将自己负责的模块写完并调试无误后,由项目组长进行组合调试。

    像这些场合就要求程序必须模块化。模块化的好处是很多的,不仅仅是便于分工,它还有助于程序的调试,有利于程序结构的划分,还能增加程序的可读性和可移植性。

    初学者往往搞不懂如何模块化编程,其实它是简单易学,而且又是组织良好程序结构行之有效的方法之一。

    本文将先大概讲一下模块化的方法和注意事项,最后将以初学者使用最广的keil c编译器为例,给出模块化编程的详细步骤。

模块化程序设计应该理解以下概述:

模块即是一个.c 文件和一个.h 文件的结合,头文件(.h)中是对于该模块接口的声明;

    这一条概括了模块化的实现方法和实质:将一个功能模块的代码单独编写成一个.c文件,然后把该模块的接口函数放在.h文件中.举例:假如你用到液晶显示,那么你可能会写一个液晶驱动模块,以实现字符、汉字和图像的现实,命名为: led_device.c,该模块的.c文件大体可以写成:

image.png

    注:此处只写出这两个函数,第一个延时函数的作用范围是模块内,第二个,它是其它模块需要的。为了简化,此处并没有写出函数体.    .h文件中给出模块的接口.在上面的例子中, 向LCD写入字符函数:wr_lcd (uchar dat_comm,uchar content)就是一个接口函数,因为其它模块会调用它,那么.h文件中就必须将这个函数声明为外部函数(使用extrun关键字修饰),另一个延时函数:void delay (uint us)只是在本模块中使用(本地函数,用static关键字修饰),因此它是不需要放到.h文件中的。    .h文件格式如下:image.png    这里注意三点:

  1. 在keil 编译器中,extern这个关键字即使不声明,编译器也不会报错,且程序运行良好,但不保证使用其它编译器也如此。强烈建议加上,养成良好的编程规范。
  2. .c文件中的函数只有其它模块使用时才会出现在.h文件中,像本地延时函数static void delay (uint us)即使出现在.h文件中也是在做无用功,因为其它模块根本不去调用它,实际上也调用不了它(static关键字的限制作用)。
  3. 注意本句最后一定要加分号”;”,相信有不少同学遇到过这个奇怪的编译器报错: error C132: 'xxxx': not in formal parameter list,这个错误其实是.h的函数声明的最后少了分号的缘故。

    模块的应用:假如需要在LCD菜单模块lcd_menu.c中使用液晶驱动模块lcd_device.c中的函数void wr_lcd (uchar dat_comm,uchar content),只需在LCD菜单模块的lcd_menu.c文件中加入液晶驱动模块的头文件lcd_device.h即可。image.png

某模块提供给其它模块调用的外部函数及数据需在.h 中文件中冠以extern 关键字声明;

    这句话在上面的例子中已经有体现,即某模块提供给其它模块调用的外部函数和全局变量需在.h 中文件中冠以extern 关键字声明。    下面重点说一下全局变量的使用。使用模块化编程的一个难点(相对于新手)就是全局变量的设定,初学者往往很难想通模块与模块公用的变量是如何实现的,常规的做法就是本句提到的,在.h文件中外部数据冠以extern关键字声明。    比如上例的变量value就是一个全局变量,若是某个模块也使用这个变量,则和使用外部函数一样,只需在使用的模块.c文件中包含#include“lcd_device.h”即可。    另一种处理模块间全局变量的方法来自于嵌入式操作系统uCOS-II,这个操作系统处理全局变量的方法比较特殊,也比较难以理解,但学会之后妙用无穷,这个方法只需用在头文件中定义一次。方法为:    在定义所有全局变量(uCOS-II将所有全局变量定义在一个.h文件内)的.h头文件中:image.png    .H 文件中每个全局变量都加上了xxx_EXT的前缀。xxx 代表模块的名字。    该模块的.C文件中有以下定义:image.png    当编译器处理.C文件时,它强制xxx_EXT(在相应.H文件中可以找到)为空,(因为xxx_GLOBALS已经定义)。    所以编译器给每个全局变量分配内存空间,而当编译器处理其他.C 文件时,xxx_GLOBAL没有定义,xxx_EXT 被定义为extern,这样用户就可以调用外部全局变量。为了说明这个概念,可以参见uC/OS_II.H,其中包括以下定义:image.png    同时,uCOS_II.H 中有以下定义:image.png    当编译器处理uCOS_II.C 时,它使得头文件变成如下所示,因为OS_EXT 被设置为空。image.png    这样编译器就会将这些全局变量分配在内存中。当编译器处理其他.C 文件时,头文件变成了如下的样子,因为OS_GLOBAL没有定义,所以OS_EXT 被定义为extern。image.png    在这种情况下,不产生内存分配,而任何 .C文件都可以使用这些变量。这样的就只需在 .H文件中定义一次就可以了。

模块内的函数和全局变量需在.c 文件开头冠以static 关键字声明;

    这句话主要讲述了关键字static的作用。Static是一个相当重要的关键字,他能对函数和变量做一些约束,而且可以传递一些信息。    比如上例在LCD驱动模块.c文件中定义的延时函数static void delay (uint us),这个函数冠以static修饰,一方面是限定了函数的作用范围只是在本模块中起作用,另一方面也给人传达这样的信息:该函数不会被其他模块调用。    下面详细说一下这个关键字的作用,在C 语言中,关键字static 有三个明显的作用:

  1. 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
  2. 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
  3. 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

    前两个都比较容易理解,最后一个作用就是刚刚举例中提到的延时函数(static void delay (uint us)),本地化函数是有相当好的作用的。

永远不要在.h 文件中定义变量!

    比较一下代码:    代码一:image.png    以上程序的结果是在模块1、2、3 中都定义了整型变量a,a 在不同的模块中对应不同的地址元,这个世界上从来不需要这样的程序。正确的做法是:    代码二:image.png    这样如果模块1、2、3 操作a 的话,对应的是同一片内存单元。    注:一个嵌入式系统通常包括两类(注意是两类,不是两个)模块:

  • 硬件驱动模块,一种特定硬件对应一个模块;
  • 软件功能模块,其模块的划分应满足低偶合、高内聚的要求。





关键词: 嵌入式     模块化     驱动     编程    

工程师
2025-08-07 18:01:20     打赏
2楼

感谢分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
听之任之是什么意思 眼睛痒用什么滴眼液 lga肾病是什么意思 野字五行属什么 山东济南有什么好玩的地方
吊丝是什么意思 湿疹用什么药最有效 算五行缺什么免费测试 冰晶是什么 眼睑浮肿是什么原因
孤芳不自赏什么意思 65是什么意思 银行卡户名是什么意思 舌头咬破了用什么药 706代血浆又叫什么
过意不去是什么意思 初级会计什么时候报名 cpap是什么意思 万象更新是什么意思 三八妇女节是什么生肖
43属什么hcv8jop7ns9r.cn 嘴边长痘痘是什么原因hcv9jop7ns0r.cn 为什么一同房就有炎症hcv9jop2ns0r.cn 世界上最大的山是什么山hcv9jop1ns4r.cn 为什么万恶淫为首jinxinzhichuang.com
白细胞减少吃什么药hcv8jop3ns9r.cn 破伤风针什么时候打onlinewuye.com 什么化妆品好用wuhaiwuya.com 植物的根有什么作用96micro.com 梅毒吃什么药好得快hcv9jop6ns6r.cn
什么网站可以看三节片hcv8jop6ns1r.cn 妈妈弟弟的儿子叫什么hcv9jop5ns9r.cn 止血芳酸又叫什么hcv8jop4ns4r.cn 椰子水有什么功效hcv9jop3ns9r.cn 梦见死人是什么兆头hcv8jop2ns4r.cn
谐星是什么意思dajiketang.com 魔鬼城是什么地貌hcv9jop1ns6r.cn 胎位左枕前是什么意思hcv8jop2ns8r.cn 管理的本质是什么hcv7jop5ns1r.cn 藤茶是什么茶hcv8jop1ns2r.cn
百度