发现CW不严谨

[复制链接]
3715|11
 楼主| ayb_ice 发表于 2007-12-7 11:53 | 显示全部楼层 |阅读模式
定义变量+指定绝对地址,发现进行外部声明不同的地址,居然不产生任何警告,错误提示。<br />而在一些场合又过于严谨,比如while(1)场合,还有我在KEIL是的一些宏定义完全正确,而在CW里不能正确替换。<br />感觉还是有差距啊。
quguoli81 发表于 2007-12-7 17:12 | 显示全部楼层

没明白你说的意思

  
 楼主| ayb_ice 发表于 2007-12-8 07:52 | 显示全部楼层

定义与声明不一致没有警告错误。。。

  
张明峰 发表于 2007-12-8 09:51 | 显示全部楼层

绝对定位的变量不保留空间

在原程序中绝对定位的变量不会被保留该地址空间,其它任意变量都可以在该地址上定义,除非你在PRM文件中将这一地址特别声明保留。<br /><br />问题是,什么特殊原因让你非在程序中绝对定位变量不可呢?
 楼主| ayb_ice 发表于 2007-12-8 15:24 | 显示全部楼层

是99%的情况不用绝对定位,但还有1%的情况是有用的

如果我参照SFR的绝对定位呢?<br />其实SFR的定义也是变量的定义形式。
yewuyi 发表于 2007-12-8 15:53 | 显示全部楼层

哦,不保留地址的做法和PICC到是很象……

~~,定义到RAM的最后把,因为编译器分配变量地址都是向前的,只要没用满,一般不会出问题。<br /><br /><br />不过感觉不保留终归不大好……<br /><br /><br />IAR是区分绝对定位变量的……
 楼主| ayb_ice 发表于 2007-12-8 16:06 | 显示全部楼层

既然支持绝对定位,就应该做好点

KEIL就很不错。。。
张明峰 发表于 2007-12-8 18:21 | 显示全部楼层

"如果我参照SFR的绝对定位呢?"

问题成立,但抬杠的意义大过实际的意义。你一定要这样做当然可以,只要记得在PRM文件里保留绝对定位的地址空间。<br /><br />KEIL-C以51系列为平台(国内绝对如此),给绝对定位的变量地址自动保留空间或许有一定的道理。因为在传统的51上其周边功能模块少的可怜,往往要用很多辅助芯片实现特定的周边接口功能,例如:ADC或DAC,键盘显示接口,端口扩展等等。这些扩展的电路和51的接口都是以XDATA空间地址映射的方式实现,硬件固定了地址译码后软件就只能绝对定位了。想当年90年代初用PAL/GAL,绝大部分场合都是为了搞定这些地址译码。<br /><br />除了51,现在其它常用的单片机如MCHP,&nbsp;FSL或ATMEL,加上大量日系单片机,本身带有丰富的周边功能模块,是真正的<font color=#0000FF>单片</font>机。针对片内资源的寄存器地址已知且固定,配合的C语言编译系统缺省已经将他们保留,不包括在开放给用户的RAM区域内。用户自定义的变量<font color=#FF0000>实在没有任何必要进行绝对定位</font>。我很想听听谁能说出一个实际的理由来证明需要自己绝对定位变量,一起交流交流。
yewuyi 发表于 2007-12-8 21:18 | 显示全部楼层

呵呵,同意LS

我尚没有遇到需要定义绝对地址的使用……<br /><br />哪位上来讲讲,这个决定定位要用来干什么?!
 楼主| ayb_ice 发表于 2007-12-10 10:47 | 显示全部楼层

那就举个例了吧

比如我的程序不想让别人看懂,故意搞些绝对定位的变量,再用强制指针操作。。。<br />当然这只是一个例子。。。<br />你说KEIL做的好的理由是51的功能所致,这一点我完全不能接受,根本原因是人家本身做的好,想做好,当然KEIL做的时间也比较久,KEIL的反汇编做的更是要强于CW,总之KEIL明显比CW高一档次,我觉得只有IAR还可以和KEIL&nbsp;PK一下。。。<br />也只好凑和用了。。。
forthlab 发表于 2007-12-10 12:55 | 显示全部楼层

我的感觉怎么正好和楼上的相反

我觉得CW比keil的c51要专业的多.
afanti 发表于 2007-12-10 14:23 | 显示全部楼层

re

萝卜白菜,各有所爱。<br />有人爱萝卜,也有人爱白菜。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

15494

帖子

34

粉丝
快速回复 在线客服 返回列表 返回顶部