打印
[开发生态]

如何避免全局变量过多混乱

[复制链接]
103|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
deliahouse887|  楼主 | 2023-12-23 14:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序架构的好坏会影响整个程序的方方面面。
比如说全局变量,后面我也意识到了这个问题。
就是全局变量多了,程序大了会掌控不住。
第一个是要避免全局变量名字重复,第二个如果哪个变量没做注释,1个月后干干净净。
特别是你把整个项目功能的全局变量定义在一起的时候,简直就是灾难。
但是,不用全局变量肯定也是不可能的。
只是要用的合理,这时候就比较考验工程师的经验了。
我是怎么做的?
拿我们无际单片机编程物联网网关那个课程项目来举例。


我采用了模块化编程的思维,从整体架构上分硬件层和应用层。
一般来说还有中间层,比如解析一些协议之类,项目中间层的代码不多,被我简化了。
每个功能模块的全局变量,都定义在各自的.c文件里。
跟我做的那个太阳能热水器控制板的程序对比,虽然全局变量的数量可能没变,但是很明显模块化的写法更加清晰。
当然,这不是让代码看起来更清爽这么简单,还有功能可扩展性强,可移植性强的优势。
可扩展性强,听起来是一个专业术语,可能很多新手不是很理解什么意思。
你试想一下,好不容易产品功能代码完成,测试也没问题了,交付给客户测试。
客户测试完,说要改功能,来来回回改个7,8次,你是不是撕碎他们的都有了?
这是常态,客户对于技术是一个小白,他并不知道他的一句话的背后,你需要付出多少。
有经验的工程师,从学会有能力偷懒开始,再急的项目,你做完还有空闲时间那才牛X。
这就是代码可扩展性的重要性。
下面再来说说可移植性。
可移植性是相对单片机(硬件平台)来说的。
比如说这个项目以前我在STM32单片机上做的,现在芯片涨价了,老板要求换成GD32的替代。
这个时候就考验你程序的移植性了。
有经验工程师写出来的程序,一般只需要改改硬件层的外设接口,应用层的产品逻辑功能代码基本不用动。
而菜鸡可能就要重写整个代码了…
一个全局变量的问题,看似简单,要想解决,还是得站在整个程序架构的角度去思考。
如果,你离这个阶段还很远,还有一个比较便捷的方法。
就是用结构体。
用面向对象的思维,把同类的变量统一定义成结构体。
比如说时间分为年、月、日、周、时、分、秒。
如果用单独全局变量的形式,比较零散,也比较难管理。


这种,就比较适合用结构体了,因为这些都属于”时间”这个对象的参数。
类似的还有很多,比如说GPIO也算一个对象,参数有端口号、引脚号、输入模式、输出模式、频率等。
可以看看STM32固件库,就是很典型的面向对象编程思维。

使用特权

评论回复
评论
forgot 2023-12-28 10:30 回复TA
全局变量不应该使用太多 

相关帖子

沙发
onlycook| | 2023-12-26 09:11 | 只看该作者
限制全局变量的使用、封装全局变量、使用命名规范、定期清理和整理全局变量以及使用配置文件或环境变量等。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

1014

帖子

0

粉丝