打印

关于嵌入式C语言中,减少使用全局变量的讨论

[复制链接]
9549|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xuqj4490|  楼主 | 2011-6-30 22:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家都知道使用全局变量对数据的安全性是不好的,很多公司或者是学校是要求写程序尽量减少或者不许使用全局变量的,。但是,对于一个写嵌入式C语言的菜鸟,我发现我的程序总是有不少的全局变量,于是我也想优化下自己的代码,但一直没有找到可以替代全局变量的好方法,在此请教各位网友,一起来讨论下这个问题。

     我一般使用全局变量的地方主要有下面几个方面:
     1  做标志量,特别是建立起中断函数和普通函数之间联系。例如在中断一次,在中断中改变标志量,,然后在其他模块中根据这个标志量做相应的操作。

     2  模块间通讯,,,比如我从串口中接受到一些数据,然后把他们解析出来,存在一些全局变量中,然后在其他模块中使用这些全局变量。


    C语言不像C++可以把变量封装在类里面,所以对于减少使用或者不用全局变量的办法还是有很多不懂。

相关帖子

沙发
liang7143| | 2011-7-1 12:37 | 只看该作者
1,做标志量,相当于一信号量,全局变量不可避免
2,模块间通讯,我一般使用消息机制,用C实现,也不是很复杂

使用特权

评论回复
板凳
xuqj4490|  楼主 | 2011-7-3 21:26 | 只看该作者
对于LS提到的消息机制,在裸奔(没有操作系统)的程序里怎么实现呢?

使用特权

评论回复
地板
小贤ai电子| | 2011-10-6 16:48 | 只看该作者
我感觉楼主这两点都避免不了用全局变量,呵呵

使用特权

评论回复
5
byeyear| | 2011-10-6 20:33 | 只看该作者
消息机制弄好了可以避免全局变量 代价是效率
c++的class封装变量本质上还是全局变量
多个模块访问的话你得用class内的static
用c的话 折衷的办法是封在struct里面
然后用指针传struct变量的地址
这样没有全局变量 也不会有消息机制的效率问题
代价是模块耦合度
我比较喜欢这种办法

使用特权

评论回复
评论
天命风流 2022-11-16 14:54 回复TA
如果用指针传递的话,这个指针不也是全局变量? 
6
michaelqhj| | 2011-10-7 11:30 | 只看该作者
对,同意五楼说的,要 看你在什么场合用了,模块间通讯可以用很多通信机制,比如信号量,消息队列,管道等,static也很有用啊,也可以用extern来声明,总比全局变量好点吧!仅供参考哈!嘿嘿

使用特权

评论回复
7
new1988| | 2011-10-8 17:58 | 只看该作者
在无操作系统的情况下,全局变量不是什么大问题,只要你的全局变量在中断函数里面没有被用到,那么就不会影响到你的全局变量的值,如果一个全局变量要在中断里面改变的话那就设置标志呗!!!

使用特权

评论回复
8
dami| | 2011-11-30 11:25 | 只看该作者
这个问题值得讨论。

使用特权

评论回复
9
lhx522729| | 2012-1-10 13:44 | 只看该作者
设计数据结构,好管理

使用特权

评论回复
10
王运新| | 2013-11-6 15:08 | 只看该作者
全局变量就是地雷,时刻要小心,曾经丰田因为全局变量吃了大亏!

使用特权

评论回复
11
liuyang8023| | 2013-11-10 13:54 | 只看该作者

使用特权

评论回复
12
棋哥| | 2013-11-12 13:20 | 只看该作者
王运新 发表于 2013-11-6 15:08
全局变量就是地雷,时刻要小心,曾经丰田因为全局变量吃了大亏!

关键是用好!汇编中,除了寄存器就是全局变量!

使用特权

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

本版积分规则

9

主题

33

帖子

2

粉丝