打印

单片机C编程时,是否用全局变量做为各子程序的数据交换接口

[复制链接]
5871|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qianlong30|  楼主 | 2009-4-23 21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用C不习惯,看书上基本介绍尽量避免使用全局变量.
但我怎么总感觉用全局变量舒服些,比如:
1.显示缓冲区设置为全局变量,显示子程序从此处取显示值,各子程序运算的结果要显示,只需把自己要显示的数值放入全局变量的缓冲区.
2.数据采集子程序,把采集到的数据放入全局变量的数据缓冲区,各子程序需要什么数据就到此数据缓冲区去取.
3.时钟子程序把读到的时间送入全局变量的时间缓冲区,各需要时间的子程序到这个全局缓冲区取.
........
我的思维总感觉全局变量传递参数好用.
请高手赐教.

相关帖子

沙发
computer00| | 2009-4-23 21:41 | 只看该作者

可以用指针传递缓冲区的地址。

使用特权

评论回复
板凳
ayb_ice| | 2009-4-23 21:49 | 只看该作者

全局变量还是要用的

LCD显示缓冲区肯定是全局变量

使用特权

评论回复
地板
highgear| | 2009-4-23 23:10 | 只看该作者

场合不同。

你一个人做一个小项目,当然会觉得全局变量很方便,所有的全在你的掌控下;多个人做大项目,一时的方便可能带来无尽的烦恼;想象一下因为某个人打错了字而改写了你使用的某个全局变量.........

使用特权

评论回复
5
sklar| | 2009-4-24 15:25 | 只看该作者

大项目。。有多大啊

所谓的什么什么大项目 也就口头说说

使用特权

评论回复
6
mohanwei| | 2009-4-24 15:40 | 只看该作者

用到全局变量的地方一般是模块化的,如键盘模块

有一个环形队列;
一个扫描函数;
一个读键函数(外部程序的唯一访问接口);

根本不会存在乱用的情况——如果是那样随便乱用的设计思想,用C++++都没有用……

打开windows、linux的代码看一下,全局变量铺天盖地……

使用特权

评论回复
7
mklwcai| | 2009-4-24 16:12 | 只看该作者

举的例子真有针对性

那3个例子用全局变量确实更适合……

或者我来举个例子,函数a,b需要共用500字节的参数,函数c,d需要共用600字节的参数,函数a,b和函数c,d互斥,单片机共有1k的ram……


使用特权

评论回复
8
taoest| | 2009-4-24 16:27 | 只看该作者

全局变量

用全局变量,会有一定的移植麻烦。代码重用率降低。

使用特权

评论回复
9
equator| | 2009-4-24 17:41 | 只看该作者

用全局变量主要是考虑内存的大小

如果内存足够用,用全局变量比较方便,如果内存不多,用局部变量可以节省内存。
再就是局部变量适合模块化设计,模块移植方便。有些大公司,要求不能使用全局变量,只能使用局部变量。

使用特权

评论回复
10
highgear| | 2009-4-24 21:05 | 只看该作者

4楼提醒的好!在mcu上谈规模,不合时宜。

还是对待goto的观点:
没关系,大胆的用,只要系统不崩溃,只要你现在认为你仍然能控制得住你的程序。等到你控制不住,头痛的时候,自然会考虑全局变量的利弊。

从过往的失误中吸取教训不失为一种学习的方法。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
panjiajun8201 + 1 神马都是浮云
11
平常人| | 2009-4-24 21:11 | 只看该作者

这个问题需要时间才能真正的体会到

需要从程序的模块化和封装性等方面考虑这个问题。。。。。。。。。。。。

使用特权

评论回复
12
machunshui| | 2009-4-25 08:14 | 只看该作者

呵呵,IBM的CEO难道要直接指挥驻非洲某国办事处人员吗?

呵呵,IBM的CEO难道要直接指挥驻非洲某国办事处人员吗?

cpu速度,资源允许的时候,尽量还是少用全局变量.

当然,大公司也有某些老板直接指挥的具体办事的重要人员,有些全局变量还是必须用的.

总之,能不用,就不用,程序自然就有一定得封装特性,和模块化特性.

使用特权

评论回复
13
呆板书生| | 2009-4-25 08:34 | 只看该作者

数据交换当然用全局变量好

所谓尽量少用,只是一个概念而已。

使用特权

评论回复
14
machunshui| | 2009-4-25 09:56 | 只看该作者

等到发生八级地震得时候,才知道框架结构得好处

砖混结构是好建,成本也低,

但是,等到发生八级地震得时候,才知道框架结构得好处

使用特权

评论回复
15
wyyall| | 2009-4-25 10:59 | 只看该作者

还是得注意!

全局变量在程序执行过程中的值有时是不好拿捏得准的!

使用特权

评论回复
16
ATmega32L| | 2009-4-25 11:41 | 只看该作者

全局变量全部封装起来。

人人用法:
1.全局变量尽量放到结构体里面,尽量不定义零散全局变量。
(这样,因为笔误误访问全局变量可能性大大降低)
(不必担心效率,访问全局结构体某个元素与访问单独定义全局变量是一致的)


2.全局变量尽量只允许本模块直接访问,对外部模块不可见。其他模块要操作这个模块的全局变量通过函数接口完成。

使用特权

评论回复
17
呆板书生| | 2009-4-25 12:32 | 只看该作者

用全局变量会大大减少程序的工作量

有人说会产生八级地震,那是危言耸听

别说小程序,小程序好办的很,我们来说说大程序吧。

比如window吧,那够大了吧,

我们知道,windows的编程基础是消息驱动,

在程序中,消息如何存放?当然是全局变量了。有人说可以用指针,那指针要指向哪?还是全局变量吧。

使用特权

评论回复
18
machunshui| | 2009-4-25 12:40 | 只看该作者

呵呵,消息指针不是非得指向全局变量

呵呵,消息指针不是非得指向全局变量.

使用特权

评论回复
19
gwsino| | 2009-4-25 12:42 | 只看该作者

对于全局变量我也来说一句

全局变量使用起来是很方便,但是在必要的时候是需要管理的啊,比如有一个变量A,在实际操作时有多个线程要对其进行写入操盘,同时有N个线程要去其进行读取操作,这时你就要管理这个全局变量,以保证每个线程获得的数据确实是其想要的,如果特别简单的程序也就算了啊,全局变量管理可能就相对简单一些,甚至不使用

使用特权

评论回复
20
dld2| | 2009-4-25 14:12 | 只看该作者

打酱油

使用特权

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

本版积分规则

150

主题

353

帖子

2

粉丝