关于减少全局变量使用的方法

2019-08-19 17:24发布

比如上位机向单片机A发送一个数32,A收到这个32后每隔2秒闪烁灯一次,闪烁的同时将32减1,然后将减一后的值再发给上位机,直到32减为0.
如果还没有减为0又收到上位机的数字比如100,立即从新计时,每隔2秒闪烁灯一次,闪烁的同时将100减1,然后将减一后的值再发给上位机,直到100减为0.

我想了很久,感觉使用全局变量是少不了的:一个放从上位机接收的数值,2s时间到的标志(没有在定时中断里做其他事情,因为我这里只是以闪烁灯为例)。
这里如果使用全局变量数量还是比较少的,假如A里面要做几百个类似但又不重样的事情呢?

有没有人能讲讲怎样减少使用全局变量?我一写程序就马上想到用全局变量了,除了上面的例子,还有:串口接收数据包、DMA发送数组(见http://www.openedv.com/posts/list/44829.htm)、DMA采集ADC值。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
shihantu
1楼-- · 2019-08-19 20:31
结构体 , 指针传入对象 .

类似但不相同的事 , 如果没有共性建议不要在一个函数里做 , 如果有共性 , 按照共性处理 , 具体的不同操作调用其他的函数实现 .

减少全局变量只是一个表象 , 如果有良好的面向对象编程的习惯 , 就很容易出现相反的情况 , 即习惯于使用局部参数传递数据 , 难以想到使用全局变量的理由 , 除了中断服务函数无法直接传入参数 .
745021926
2楼-- · 2019-08-20 00:21
数据不多的话就函数返回(USART,ADC),多的话可以用指针(数据包)
正点原子
3楼-- · 2019-08-20 00:57
用全局变量可以啊,你用其他的占内存更多.
Di诺
4楼-- · 2019-08-20 03:25
 精彩回答 2  元偷偷看……
shihantu
5楼-- · 2019-08-20 04:45
回复【5楼】Di诺:
---------------------------------
是 .
Di诺
6楼-- · 2019-08-20 08:20
回复【6楼】shihantu:
---------------------------------
谢谢你。

一周热门 更多>