打印

不提倡使用全局变量,2k数据该怎么办啊?所长出出招!

[复制链接]
楼主: zhuhai2004
手机看帖
扫描二维码
随时随地手机跟帖
41
zhuhai2004|  楼主 | 2007-12-22 16:23 | 只看该作者 回帖奖励 |倒序浏览

暂时做法:大数据块用全局变量,其他的不要。

8位机的程序也就是几十K而已,如果非得分割清晰的,代价也很大。当然所长的消息的方法对于组织程序还是很不错的。所长你的通讯程序在接收过程中没有任何的处理,只是接收完成所有的数据,再做协议的解析,效率?(需要组网的时候,非本机数据会怎样处置?)ST16C554_Interrupt( psST16C554 )这个会有解析的用途吗?

使用特权

评论回复
42
mohanwei| | 2007-12-22 19:50 | 只看该作者

资源充足的时候,当然可以用一大堆“通用库”了

正因为嵌入式领域经常面临资源不足的情况,所以……

使用特权

评论回复
43
snakeemail| | 2007-12-23 09:50 | 只看该作者

实例:北京普源数字示波器液晶面板就是全局变量

21ic有它的**,不要老把书上的东西绝对化,灵活灵活

使用特权

评论回复
44
flanker| | 2007-12-23 20:15 | 只看该作者

为嘛不提倡用全局变量?

MIPS处理器上,全局变量访问的时候还能快一点点。
因为编译器用专门的一个通用寄存器当全局变量指针。

ARM体系结构不熟,木有发言权。
51很久不玩了,已经还给老妈、师父和周立功了。
不过51地址空间就小,编译器编出来的也默认是静态变量,和用全局变量又有什么差别呢?

使用特权

评论回复
45
ra_rabbit| | 2007-12-23 20:51 | 只看该作者

你待全局变量亲点,他也会待你亲点的

怕啥 , 
多交两次手 不就熟悉了

使用特权

评论回复
46
IceAge| | 2007-12-24 00:19 | 只看该作者

不是不可以用,而是不能滥用

全局变量,我想在 csdn 上不会有太多争议,而在 21icbbs 上却有争论,这也许就是 小马过河 故事最好的例证。

管理一个软件项目与管理一个公司很相似。工作室之类的公司,确实没有必要构建框架结构,划分模块,一个能人就可以全部胜任。而一个1000人的公司,没有合理的框架结构,只能会被批评管理混乱。一个小公司里,或许人人都是全局变量,而一个大公司,大多是员工被隐藏了,IT 部门的员工不能直接指挥食堂里的厨师。

"怎么会不知道在哪被修改了?当然知道了" 对于若干 k 的 mcu 软件,通常一个人做,**力再好一些,完全可以控制住。对于规模较大软件,情况不一样。仔细的封装,至少会减少因为键盘输入错误或是无意的失误而导致抓狂的几率。至于能修改其它模块的内部变量,这属于指针越界之类的严重错误。

另外,不要把贪图方便说成是灵活。
放纵自己很容易,任何人都做得到。约束自己很难,特别是在没有监管的情况下。


使用特权

评论回复
47
农民讲习所| | 2007-12-24 07:31 | 只看该作者

心是平原野马,易放难收

观“放纵自己很容易,任何人都做得到。约束自己很难,特别是在没有监管的情况下。”后感。

使用特权

评论回复
48
后学| | 2007-12-24 07:57 | 只看该作者

有些道理,也许要亲身经过教训,才会接受,

说多了伤感情,何必呢,

使用特权

评论回复
49
后学| | 2007-12-24 07:58 | 只看该作者

结论:全局变量可以用,要慎用,不要滥用,

大家都洗洗睡吧,

使用特权

评论回复
50
dld2| | 2007-12-24 08:25 | 只看该作者

顶“小马过河”的比喻

楼上,该起床了。

使用特权

评论回复
51
dld2| | 2007-12-24 08:31 | 只看该作者

关于“快一点点”

大程序里,函数一个套套一个,为什么呢?
显然摊平了快一点点。
但是这里快一点点不是主要矛盾。
追求的是清晰的层次和模块的结构。

使用特权

评论回复
52
gooog| | 2007-12-24 08:55 | 只看该作者

是不提倡,但是不是说不能不用

消息一般传递复杂结构的时候用,简单的用变量就能解决的,用消息传递反而复杂了。

使用特权

评论回复
53
wlsui| | 2007-12-25 21:29 | 只看该作者

能不能推荐一本讲程序设计比较好的书?

比如像前面IceAge在12楼讲的那种处理方式一样,想找本有讲回调函数及程序结构方面的书看看,但不知道哪本,IceAge、hotpower和农民讲习所这样的高手能不能推荐几本啊,好让我早日脱离菜鸟的角色

使用特权

评论回复
54
mohanwei| | 2007-12-25 21:37 | 只看该作者

以前都以为自己苦,帮别人看过一个程序以后才知道什么叫

满屏幕全局变量,一个变量多用(替keil省力?),data,idata,pdata各司其职,改一个都编译不过……真难为那块AT89C51了

使用特权

评论回复
55
lpf336| | 2007-12-25 22:05 | 只看该作者

顶一个

好贴

使用特权

评论回复
56
sz_kd| | 2007-12-25 22:58 | 只看该作者

自己用的好想怎么用就怎么用

程序的功能和容错性是首要的

使用特权

评论回复
57
rainmans| | 2007-12-26 02:34 | 只看该作者

不必要过于教条

在8位,16位机上,完全可以使用全局变量。使用方法楼上各位有很多实例都很好。
关键还在于个人实践后的体会,慢慢会掌握好尺度。
ARM 等32位机上,建议参考linux等开源软件,俺没有用过没有发言权。

使用特权

评论回复
58
FLandY| | 2007-12-26 09:30 | 只看该作者

讲的不错

使用特权

评论回复
59
xiajiawen| | 2007-12-26 10:56 | 只看该作者

如果中断中适当使用全局变量,处理还是相当快捷方便的

如串口通信中断的处理中,接收数据需存入BUFFER,这个中断处理程序越短越好,采用全局变量很合适

使用特权

评论回复
60
dld2| | 2007-12-26 11:18 | 只看该作者

这里应该明确一个问题

模块中的静态变量不属于一般意义上的全局变量。
楼上所说的适用静态变量。把串口中断处理程序和发送、接收、协议处理功能封装在一个模块中。

使用特权

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

本版积分规则