打印
[经验分享]

单片机开发项目全局变量太多怎么管理?

[复制链接]
2617|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
juliestephen|  楼主 | 2024-9-19 02:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个工程师的成长过程,总是惊人地相似,曾经我也和大家一样,一直想解决程序如何写能更好这个问题。

全局变量太多难管理,看起来是个小问题,要想解决其实背后涉及很多东西,否则不如你直接加注释来得更直接。

变量确实要用,你省不了,你只能通过别的方式去规避乱的问题,比如说一些编程技巧和思维。

后面经过无数项目洗礼,我个人领悟是:一个程序写得好不好,主要看程序算法和程序架构。

先来说说算法好了,算法不是刚需。

很多新手以为程序要想写得好,跟英语和数学水平有关系。

今天我给大家交个底,并不是,最多数学好算法能做得更优,大多数产品算法都不复杂,单片机能做多复杂的运算是吧?

很多算法,难在前端公式剖析,不管再复杂的项目都好,最后体现在程序里的都是加减乘除,与或等这些简单运算。

举个例子:

请给出能够计算出结果等于8的公式。

不同的人,计算出来的公式可能是不一样的,比如以下几种公式都能实现。

公式1:(1+1)*(2+2);

公式2: 1<<3

很明显,公式2的计算效率更高,主要是体现在汇编指令更少,机器周期自然更短,所以说算法更好。

实际上真正的算法比这个要复杂得多,这里只是举个例子而已。

像这种公式,一般我们在小笔记本上先算好,最后转成用加减乘除之类的公式用程序写出来。

大多数情况,只要产品实时性要求不是特别苛刻的,公式1和公式2你看不出任何区别。

并不是每个行业的产品都需要算法,每个行业的算法肯定也是不一样。

哪怕你数学很差,都没关系,你找个数学厉害的人,告诉他你要算什么。

让他用加减乘除、与、或、移位运算帮你算出一个最佳解题公式,你带入到程序直接用就行了。

所以我们在做产品的时候,不要过度去追求程序执行效率,只要能满足需求就好,并不是刚需。

研究算法是很浪费时间的,通用性也不强,反正就是性价比很低。

下面再来说说程序架构,这个实用性和通用性极强。

而且可以说不懂架构中大型项目绝对做不来,不是做不好,而是做不来!

可能很多人工程师做了几年,已经碰到了瓶颈期,一直想提升,又无能为力。

比如说,变量多了,函数多了,程序总是乱糟糟的,一整合起来一堆BUG。

这个功能好了,影响了别的功能,改了别的功能,这个功能又不行了。

最后马马虎虎把代码好不容易整合起来实现完整的产品功能了,也没BUG了。

挨千刀的老板又跟你说要改功能,在刚开始做研发那几年,我就最怕增加功能、改功能。

哪怕只是把LED改成每秒闪1次,又或者说增加一个按键这么小的功能,如果架构不好的话,都有可能花上你一周甚至更长。

那程序架构到底是什么?

我认为是一种成熟的编程思维,是经验的总结,比如RTOS就是属于一种程序架构,STM32固件库也是一种程序架构。

不同的人,编写出来的程序架构都不一样,有大的有小的,最重要是够用就好。

而全局变量多导致程序乱的问题,就可以用程序架构的模块化编程特点来解决。

使用特权

评论回复
沙发
51xlf| | 2024-10-3 07:52 | 只看该作者
将代码分割成独立的模块,每个模块负责一部分功能,并尽量减少模块间的直接依赖。这样可以限制全局变量的使用范围。

使用特权

评论回复
板凳
cashrwood| | 2024-10-3 13:34 | 只看该作者
通过函数参数传递所需的数据,而不是依赖全局变量。

使用特权

评论回复
地板
wilhelmina2| | 2024-10-3 18:26 | 只看该作者
采用事件驱动的设计,通过事件或消息传递来共享信息,而不是直接使用全局变量。

使用特权

评论回复
5
cemaj| | 2024-10-4 16:23 | 只看该作者
尽量减少全局变量的使用,因为全局变量可能会增加代码的复杂性。
在必要的时候才使用全局变量,并确保它们在不同的模块中不会产生冲突。

使用特权

评论回复
6
mickit| | 2024-10-4 17:49 | 只看该作者
使用命名空间或结构体来组织相关的全局变量,这样可以减少命名冲突并提高代码的可读性。

使用特权

评论回复
7
cashrwood| | 2024-10-4 20:20 | 只看该作者
尽量通过函数参数传递变量,而不是直接访问全局变量。
使用函数返回值来输出结果,减少全局变量的使用。

使用特权

评论回复
8
bartonalfred| | 2024-10-5 11:29 | 只看该作者
谨慎使用内存,避免内存泄漏。
对于动态分配的内存,确保在不需要的时候及时释放。

使用特权

评论回复
9
pentruman| | 2024-10-5 22:37 | 只看该作者
尽可能使用局部变量代替全局变量,特别是在函数内部,这样可以减少全局变量的数量。

使用特权

评论回复
10
hilahope| | 2024-10-8 11:37 | 只看该作者
一些编译器提供了优化选项,可以在编译时对代码进行优化,减小程序的体积和提高执行效率。

使用特权

评论回复
11
wwppd| | 2024-10-8 16:11 | 只看该作者
尽可能将全局变量设置为静态变量,限制它们的作用域,只在其所属的源文件中可见。

使用特权

评论回复
12
lzmm| | 2024-10-8 21:13 | 只看该作者
尽量使用局部变量代替全局变量,特别是在函数内部。局部变量的作用范围有限,可以减少全局变量的数量和使用。

使用特权

评论回复
13
averyleigh| | 2024-10-9 19:18 | 只看该作者
将程序分成不同的功能模块,每个模块负责一个特定的功能。
每个模块可以有自己的变量和函数,这样可以更好地组织代码,降低复杂性。

使用特权

评论回复
14
maudlu| | 2024-10-16 10:52 | 只看该作者
对于必须作为全局变量使用的对象,可以考虑使用单例模式,确保全局只有一个实例。

使用特权

评论回复
15
wengh2016| | 2024-10-16 13:38 | 只看该作者
尽量在函数内部使用局部变量,只在必要时才使用全局变量。

使用特权

评论回复
16
mmbs| | 2024-10-16 20:28 | 只看该作者
对于一些配置性的数据,可以使用配置文件来管理,这样可以将这些数据与代码分离。

使用特权

评论回复
17
pl202| | 2024-10-17 08:17 | 只看该作者
将相关的全局变量组合成一个结构体或类,这样可以更好地组织和管理这些变量。同时,结构体或类提供了更好的封装性,可以避免不必要的访问和修改。

使用特权

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

本版积分规则

32

主题

1289

帖子

2

粉丝