单片机全局变量的使用

我们都知道有一个规则,那就是尽量不要使用全局变量,但自己写程序,有时感觉使用全局变量很方便,而且并没感到有什么缺点。

将网上查的的资料总结一下,发现全局变量的缺点主要有两个,其它具体的危害一般都是这两个的具体的显现。

全局变量缺点:

1.全局变量存在周周期长,将会占用更多的内存。

2.全局变量多处被调用,使全局变量的值变得不确定。

(1)用全局变量会增加程序的耦合性,会有一定移植麻烦,代码重用率低。

(2)全局变量,使用和更改他的地方多了以后,各个地方逻辑关系难以确定。

(3)过多的全局变量,大大降低程序的可读性,可维护性。

(4)容易造成命名冲突 

 

其实,全局变量是不可避免要用到的,比如说温度采集,我们将传感器送回来的数据处理后必须放在一个全局变量里。然后要使用它时,直接从全局变量中取便可以了。

因为C语言中函数return只能放回一个值,使用全局变量便可以返回多个值,但这并不合适,因为这占空间,减慢了运算速度,又增加了这个函数的耦合性。可以定义数组,返回指针的方式传递多个参数。如果不希望改变原参数值,使用const限制指针。

所以,传递参数不要用全局变量,可以使用指针。而像显示缓冲区,数据采集子程序,通信缓冲区。这样的地方,全局变量是不可避免要用到的。

 

为什么呢?因为这些地方都有同一个特点。想一想,单片机的寄存器相当于全局变量吗?

寄存器易变的,外部事件可改变。但一般只有一种事件可以改变它,而其它的地方使用但改变他的数值。

可见,如果全局变量只有一处改变它,只要内存够,就可以大胆使用它。

但无论如何全局变量使用多了,都会感觉程序混乱。

 

使用全局变量的好习惯

1.如果只有某.c文件用,就static到该文件中;如果只有一个函数用,那就static到函数里面去;

2尽量把变量的作用范围控制在使用它的模块里面,如果其他模块要访问,就开个读或写函数接口出来,严格控制访问范围。(就是利用.h文件#include)

3.当一个模块里面的全局变量超过3个(含)时,就用结构体包起来吧。要归0便一起归0,省得丢三落四的。

4.如果一定要用全局变量,请遵守命名规范,比如在前面加"g_", 以防造成命名冲突。

5.小程序结构简单,即使使用全局变量也方便管理。

 

 

这还有一句话,“每一个设备底层几乎都需要它来记录当前状态,控制时序,起承转合。”从网上看到的,但还是不太理解其中的意思。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值