本命年红内衣什么时候穿| 喝苦荞茶对身体有什么好处| 六角龙鱼吃什么| 脾胃气滞吃什么中成药| 洋葱吃多了有什么坏处| 顺理成章是什么意思| 百香果什么味道| 寒天是什么| 器质性心脏病是什么意思| 老二是什么意思| 糖醋里脊是什么肉做的| 全血是什么意思| 孕20周做什么检查| 枸杞泡水喝有什么作用| 游戏bp是什么意思| ecc是检查什么的| 股骨头坏死挂什么科| bnp是什么| 5点至7点是什么时辰| 水光针是什么| 钟爱一生是什么意思| 兆后面是什么单位| 做梦捡到钱是什么预兆| 白细胞高一点点是什么原因| 属猴的和什么属相最配| 蒸馏酒是什么酒| 大队书记是什么级别| 什么是佝偻病有什么症状| 不善言辞是什么意思| 哮喘病应该注意什么| 缺钾是什么原因| 孑然一身是什么意思| 粘人是什么意思| 什么是1型和2型糖尿病| 容易做梦是什么原因引起的| 胃反流是什么原因| 四个月宝宝可以吃什么辅食| 微信为什么不能转账| 梦见孩子丢了是什么意思| 大便带血是什么原因男| 大便带绿色是什么原因| 清热败火的败是什么意思| 女人耳鸣是什么前兆| 哀大莫过于心死是什么意思| 蜘蛛喜欢吃什么| 槟榔是什么味道| 线性是什么意思| 今年83岁属什么生肖| 胆固醇过高有什么危害| 股癣用什么药膏好得快| 无名指戴戒指什么意思| 五月二十四号是什么星座| 结婚15年是什么婚| 牛羊成群是什么生肖| 猫三联什么时候打| 猫和狗为什么是天敌| hcho是什么意思| 什么是肝脏纤维化| ab型和b型生的孩子是什么血型| 水指什么生肖| 眼睛模糊吃什么药| 土耳其是什么民族| 48年属什么| 什么是电子邮件地址| 里正相当于现在什么官| mi医学上是什么意思| 小便有血尿是什么原因| mk是什么意思| 舌头溃疡是什么原因| pu是什么元素| 怀孕有什么感觉| 子宫脱垂吃什么药怎么恢复正常| 狗为什么喜欢吃屎| 什么是腺样体| 普陀山求什么最灵验| 洁身自好什么意思| 喝酒过敏是什么原因| 男人壮阳吃什么最快| 跟腱炎吃什么药效果好| 外阴白斑是什么引起的| 早孕挂什么科检查| 火加木是什么字| 软组织挫伤用什么药| 什么是优质蛋白食物| 干扰素是治什么病的| 甲状腺是什么| 安全期一般是什么时候| 红细胞体积偏高是什么意思| 萨洛蒙什么档次| 今年什么生肖年| 切诺是什么药| 眼睛红红的是什么原因| 龟头上有小红点是什么| 一个口一个坐念什么| 左心房增大是什么原因| 痞闷什么意思| 月经崩漏吃什么止血| prog是什么意思| 什么食物好消化| thr是什么氨基酸| 什么是五谷| 咖啡喝多了有什么副作用| 广西北海有什么好玩的地方| 凹是什么意思| 为什么拉屎会拉出血| 要强是什么意思| 白鱼又叫什么鱼| 伤口吃什么消炎药| 脖子上有痣代表什么| 团宠是什么意思| 缺钙吃什么补得最快| 很无奈是什么意思| 通奸是什么意思| 阴蒂长什么样| 健康证是什么样的| 雨对什么字| 尿道炎吃什么药好得快| 备孕挂什么科| 大肠杆菌是什么病| 猫的耳朵有什么作用| 来月经同房会有什么后果| 睡觉咳嗽是什么原因| 感染幽门螺杆菌吃什么药| 脸上长湿疹是什么原因| 先兆流产是什么意思| 音节是指什么| 大生化是检查什么| 单立人加吉念什么| 血糖在化验单上叫什么| 失信是什么意思| 为什么总打喷嚏| 妈妈最大的愿望是什么| 支气管炎是什么原因引起的| 夜晚的星星像什么| 什么的感受| 黑眼袋是什么原因引起的| 天妇罗是什么意思| 猫为什么不怕蛇| 肠胀气是什么原因| 身上痒但是什么都没有| 基数是什么意思| 喝什么茶对睡眠有帮助| 滴虫性阴炎用什么药效果最好| pagani是什么车| 高丽棒子是什么意思| 和什么细什么的成语| 梦见自己大出血是什么征兆| 屋里喷什么消毒最好| 教师节送老师什么好| 阳历1月份是什么星座| 怀孕什么时候吃鹅蛋最好| 火加良念什么| 什么时候母亲节| 歧路亡羊告诉我们什么道理| 调制乳粉是什么意思| 榧读什么| 什么是墨菲定律| 山五行属什么| 男的有霉菌是什么症状| 辰龙是什么意思| 俞伯牙摔琴谢知音摔的是什么乐器| 什么食物补钾| 每延米是什么意思| 懒觉什么意思| tct检查什么项目| 甲沟炎是什么样子的| 甲状腺需要做什么检查| 打喷嚏流清鼻涕是什么感冒| t1什么意思| 性激素六项什么时候查| 绿鼻涕是什么原因| 什么是心脏造影| 没睡好头疼是什么原因| 医共体是什么意思| 部首和偏旁有什么区别| 看乳腺应该挂什么科| 脚麻木是什么病的前兆| 处女座和什么座最配| 涸的意思是什么| 什么时候跑步减肥效果最好| 本钱是什么意思| 5月28日是什么星座| y是什么意思| 梦到拆房子是什么意思| 降钙素原高是什么原因| 陈旧性心梗是什么意思| 林格液又叫什么| 炖鸡放什么调料| 母亲节送妈妈什么| 绿草如茵是什么生肖| 吃什么排毒| hpf医学是什么意思| 鸡肉煲汤加搭配什么好| 男性染色体是什么| 鸽子和什么一起炖汤最有营养| 性感染有什么症状| 三月二十六是什么星座| 高压高低压低是什么原因| 金与什么相生相克| 3月12日是什么星座| 轻度抑郁症吃什么药| 农历六月初三是什么星座| 血脂异常是什么意思| 孑孓什么意思| 点了痣要注意什么| 什么粥最养胃健脾| 结婚需要什么| 蒲公英什么功效| 丝缎是什么面料| 为什么低烧比高烧可怕| 长期湿热会引起什么病| 增加骨密度吃什么药| 孙武和孙膑是什么关系| 福祸相依什么意思| 多囊卵巢综合症是什么| 盐水是什么| 推拿是什么| 甲苯对人体有什么危害| fop是什么意思| 口炎是什么字| hpv感染后有什么症状| 2026属什么生肖| 嘴唇周围长痘痘是什么原因导致| 肚子咕噜响是什么原因| 鑫字代表什么生肖| 间接胆红素是什么| 鸡炖什么好吃又有营养| 2月1号什么星座| 报仇是什么意思| 阿奇霉素治疗什么| hpv58阳性是什么意思| 多此一举是什么意思| 孤军奋战是什么意思| 乔丹是什么牌子| ra医学上是什么意思| 什么头什么尾| 世袭制是什么意思| 病毒长什么样子| 7.11是什么星座| 台湾有什么特产最有名| 额头窄适合什么发型| c13呼气试验阳性是什么意思| 防晒衣什么材质最防晒| 吃什么有助于消化| 枕头什么牌子好| 高碱性食物都有什么| 万加一笔是什么字| 二氧化钛是什么东西| 脂肪的克星是什么| 世界上牙齿最多的动物是什么| 什么是童子命| 经常吃秋葵有什么好处| 怀孕做nt检查什么| 广义货币m2是什么意思| 做梦梦到蛇是什么意思| 昆明有什么好玩的| 银杏叶片有什么作用| 宜子痣是什么意思| 夜晚尿频尿多是什么原因| 乳腺癌的症状是什么| 湿疹是什么症状图片| 钡餐造影能查出什么| 孕妇为什么要左侧睡不能右侧睡| 硝酸咪康唑乳膏和酮康唑乳膏有什么区别| 百度

李克强主持召开国务院常务会议 部署推进医联体建设

[复制链接]
楼主
 楼主| dffzh 发表于 2025-5-20 17:07 | 只看该作者 |倒序浏览 |阅读模式
本帖最后由 dffzh 于 2025-5-20 17:08 编辑

#申请原创#
@21小跑堂

做嵌入式产品的软件开发时,我们会经常遇到因为成本、交期或芯片资源紧张等原因更换MCU平台的情况,加上不同MCU厂商在芯片外设、寄存器和库函数接口等方面的命名规则和名称不一样,软件上肯定是避免不了要重新搭建和开发调试;这个时候,如果你的与MCU平台相关的底层驱动代码的复用率高,那你的开发工作量就会大大减少了。
下面作者就以实际开发案例与大家分享一下怎么样设计驱动代码以提高代码复用率,主要是针对MCU基于外围芯片的驱动代码与MCU配置相关的阐述,供大家参考和使用。
项目上用到了IS3980S芯片和U74HC595芯片,前者是输入:读取数字输入状态,后者是输出:驱动LED显示。
MCU和IS3980S芯片之间有如下4根信号线连接通信:

那在设计IS3980S的驱动代码时,这几根信号线就是实现为MCU的GPIO的定义和配置;
在通过GPIO口读写数据时,怎么样设计可以更方便代码以后的维护呢?
在C语言中,我们可以用宏定义#define的方式来实现GPIO口的绑定以及用宏函数实现GPIO的数据读写,相关代码如下所示,定义在is3980s.h头文件里面:

虽然这个项目里几个信号线引脚都是绑定在GPIOB,但为什么没有用IS3980S_GPIO,而要对每个信号线引脚单独加个宏定义来指向GPIO呢?这样设计的话,如果后续硬件更改了GPIO口,每个信号线引脚你只需要修改一个地方即可,方便快捷安全。如果MCU使用的引脚很多,不要觉得这种方式繁琐,反而更要用这种方式实现,后续维护时,你会很轻松,哪怕换了MCU平台,你一般只需要修改头文件里对应的宏定义名称即可,驱动代码源文件is3980s.c则不需要做任何更改。源文件里的函数实现举例如下:

总之一句话:
你的芯片驱动代码源文件里尽量不要直接使用MCU平台底层的东西,改用宏定义等方法来封装到头文件里;
宏定义功能越具体越详细,后续代码维护就越方便越简单,出现Bug的可能性就越低。

再举个例子,加深大家的印象:
MCU和U74HC595芯片之间有如下4根信号线连接通信:

同样地,我们依葫芦画瓢,在u74hc595.h文件里就可以按如下代码定义这几个信号线引脚:


源文件里的一个函数实现如下:

这样,无论后续更换了什么MCU平台,你要做的工作就是把头文件里的相关宏定义更改一下即可,除非是什么比较奇葩的MCU平台,那另当别论了。

通过以上这种提高芯片驱动代码复用率的方法,无论是在代码修改量方面,还是在解决MCU平台移植和编译时报错问题多方面,或者是代码可读性和可维护性等方面,你将会深深受益,不信的话,你可以试试!

本帖子中包含更多资源

百度 大阪樱花疯狂反扑无果,倒是让武里南联再次寻觅到破门机会,第54分钟,胶普龙左路传中,埃德加插上跃起小禁区右侧头槌将球顶入球门左下角。

您需要 登录 才可以下载或查看,没有账号?注册

×

点评

[url=home.php?mod=space&uid=760190]@21小跑堂[/url] 管理员,你好,求原创审核哦!  发表于 2025-5-30 14:56
沙发
734774645 发表于 2025-5-22 14:50 | 只看该作者
把底层抽象出来,作为一个独立的文件。
板凳
 楼主| dffzh 发表于 2025-5-22 15:04 | 只看该作者
734774645 发表于 2025-5-22 14:50
把底层抽象出来,作为一个独立的文件。

阁下的这种方法确实更好更进一步了,彻底把底层的东西与其他代码解耦
地板
逆鳞风暴 发表于 2025-6-3 09:11 | 只看该作者
非常实用的分享!通过宏定义和封装确实可以大大减少跨平台移植的工作量。能否再详细说明一下如何针对不同的MCU平台进行宏定义的调整?
5
 楼主| dffzh 发表于 2025-6-3 13:24 | 只看该作者
逆鳞风暴 发表于 2025-6-3 09:11
非常实用的分享!通过宏定义和封装确实可以大大减少跨平台移植的工作量。能否再详细说明一下如何针对不同的 ...
其实可以把头文件里的与MCU平台相关的宏定义再封装一层,并抽象出来单独封装到一个头文件里进行管理,这样代码移植时,无需修改驱动代码的源文件和头文件,而只需要修改封装的头文件即可,比如封装GPIO名称:目前是在驱动代码头文件里按如下方式申明:
  1. #define   IS3980S_GPIO   GPIOB
可以把GPIOB封装到单独的通用头文件(commonHeader.h)里,并按如下方式命名:
  1. #define  IS3980S_MCU_GPIO  GPIOB
而驱动头文件里修改如下:
  1. #define  IS3980S_GPIO   IS3980S_MCU_GPIO
如此操作后,代码移植时,只需要修改commonHeader.h文件即可。
其他宏定义的封装操作类似。



6
EchoInEons 发表于 2025-6-14 17:35 | 只看该作者
可以学习一下ST的标准库和HAL库,HAL基本就是bsp层和中间层是分开的,但是这工作量比你修改代码本身更大哦
7
迷雾隐者 发表于 2025-6-15 11:49 | 只看该作者
非常赞同楼主的观点,使用宏定义来封装GPIO操作确实可以大大减少因MCU平台更换带来的代码修改量。这种方法不仅提高了代码的可移植性,也使得代码更加清晰易读。
8
 楼主| dffzh 发表于 2025-6-16 08:54 | 只看该作者
EchoInEons 发表于 2025-6-14 17:35
可以学习一下ST的标准库和HAL库,HAL基本就是bsp层和中间层是分开的,但是这工作量比你修改代码本身更大哦 ...

HAL库的设计理念确实值得我们好好研究一下。
9
 楼主| dffzh 发表于 2025-6-16 08:55 | 只看该作者
迷雾隐者 发表于 2025-6-15 11:49
非常赞同楼主的观点,使用宏定义来封装GPIO操作确实可以大大减少因MCU平台更换带来的代码修改量。这种方法 ...

是的,效果非常明显。
10
复古留声机 发表于 2025-6-17 09:01 | 只看该作者
非常实用的分享,通过宏定义和封装确实可以大大提高代码的复用率和可维护性。在实际项目中,这种方法可以大大减少因平台更换带来的工作量。
11
qinlu123 发表于 2025-6-17 11:03 | 只看该作者
dffzh 发表于 2025-6-16 08:55
是的,效果非常明显。

不能用宏,要用函数指针将各层分割开来
12
彩虹捕手 发表于 2025-6-17 16:02 | 只看该作者
非常赞同楼主的观点,使用宏定义和封装确实可以大大减少因更换MCU平台而带来的代码修改量。这种方法在实际项目中非常实用,感谢分享!
13
 楼主| dffzh 发表于 2025-6-18 08:39 | 只看该作者
彩虹捕手 发表于 2025-6-17 16:02
非常赞同楼主的观点,使用宏定义和封装确实可以大大减少因更换MCU平台而带来的代码修改量。这种方法在实际 ...

希望有所帮助
14
星空魔法师 发表于 2025-6-18 09:52 | 只看该作者
确实,更换MCU平台时,代码复用率的提升可以大大减少工作量。通过宏定义和封装确实是一种有效的方法,值得学习。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

104

主题

1143

帖子

22

粉丝
快速回复 返回顶部 返回列表
羊的五行属什么 唾液酸苷酶阳性是什么意思 陈赫的老婆叫什么名字 孕囊是什么 金牛座是什么性格
巨蟹男喜欢什么类型的女生 为什么不建议光子嫩肤 吃什么水果对肝好 云南属于什么地区 肾亏和肾虚有什么区别
呃是什么意思 9月25日什么星座 红色的海鱼是什么鱼 水泥烧伤皮肤用什么药 阴道流黄水是什么原因
心里发慌是什么病 鹿晗的原名叫什么 口中发甜是什么原因 什么的城堡 32周孕检检查什么项目
新生儿溶血是什么意思hcv8jop1ns0r.cn 上皮细胞高是什么原因hcv8jop7ns0r.cn 杰字属于五行属什么hcv9jop7ns2r.cn 女人身体弱带什么辟邪hcv8jop9ns2r.cn 吃瓜什么意思hcv9jop4ns6r.cn
最近老放屁是什么原因chuanglingweilai.com 什么是集成灶hcv9jop4ns7r.cn 骨髓不造血是什么病hcv8jop0ns0r.cn c14阳性是什么意思hcv8jop6ns7r.cn 小苏打是什么hcv9jop6ns4r.cn
血脂高是什么原因引起的hcv8jop6ns3r.cn 肝回声密集是什么意思hcv9jop6ns0r.cn 急性肠胃炎吃什么药hcv8jop5ns2r.cn 鱼油有什么作用onlinewuye.com 双侧甲状腺弥漫病变是什么意思naasee.com
热伤风感冒吃什么药hcv8jop0ns0r.cn 赵本山是什么学历hcv8jop8ns4r.cn 冠脉cta主要检查什么travellingsim.com 吃什么排铅最快hcv8jop2ns8r.cn 乘风破浪的意思是什么hcv9jop4ns5r.cn
百度