打印

发现CW不严谨

[复制链接]
2641|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ayb_ice|  楼主 | 2007-12-7 11:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定义变量+指定绝对地址,发现进行外部声明不同的地址,居然不产生任何警告,错误提示。
而在一些场合又过于严谨,比如while(1)场合,还有我在KEIL是的一些宏定义完全正确,而在CW里不能正确替换。
感觉还是有差距啊。

相关帖子

沙发
quguoli81| | 2007-12-7 17:12 | 只看该作者

没明白你说的意思

使用特权

评论回复
板凳
ayb_ice|  楼主 | 2007-12-8 07:52 | 只看该作者

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

使用特权

评论回复
地板
张明峰| | 2007-12-8 09:51 | 只看该作者

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

在原程序中绝对定位的变量不会被保留该地址空间,其它任意变量都可以在该地址上定义,除非你在PRM文件中将这一地址特别声明保留。

问题是,什么特殊原因让你非在程序中绝对定位变量不可呢?

使用特权

评论回复
5
ayb_ice|  楼主 | 2007-12-8 15:24 | 只看该作者

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

如果我参照SFR的绝对定位呢?
其实SFR的定义也是变量的定义形式。

使用特权

评论回复
6
yewuyi| | 2007-12-8 15:53 | 只看该作者

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

~~,定义到RAM的最后把,因为编译器分配变量地址都是向前的,只要没用满,一般不会出问题。


不过感觉不保留终归不大好……


IAR是区分绝对定位变量的……

使用特权

评论回复
7
ayb_ice|  楼主 | 2007-12-8 16:06 | 只看该作者

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

KEIL就很不错。。。

使用特权

评论回复
8
张明峰| | 2007-12-8 18:21 | 只看该作者

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

问题成立,但抬杠的意义大过实际的意义。你一定要这样做当然可以,只要记得在PRM文件里保留绝对定位的地址空间。

KEIL-C以51系列为平台(国内绝对如此),给绝对定位的变量地址自动保留空间或许有一定的道理。因为在传统的51上其周边功能模块少的可怜,往往要用很多辅助芯片实现特定的周边接口功能,例如:ADC或DAC,键盘显示接口,端口扩展等等。这些扩展的电路和51的接口都是以XDATA空间地址映射的方式实现,硬件固定了地址译码后软件就只能绝对定位了。想当年90年代初用PAL/GAL,绝大部分场合都是为了搞定这些地址译码。

除了51,现在其它常用的单片机如MCHP, FSL或ATMEL,加上大量日系单片机,本身带有丰富的周边功能模块,是真正的单片机。针对片内资源的寄存器地址已知且固定,配合的C语言编译系统缺省已经将他们保留,不包括在开放给用户的RAM区域内。用户自定义的变量实在没有任何必要进行绝对定位。我很想听听谁能说出一个实际的理由来证明需要自己绝对定位变量,一起交流交流。

使用特权

评论回复
9
yewuyi| | 2007-12-8 21:18 | 只看该作者

呵呵,同意LS

我尚没有遇到需要定义绝对地址的使用……

哪位上来讲讲,这个决定定位要用来干什么?!

使用特权

评论回复
10
ayb_ice|  楼主 | 2007-12-10 10:47 | 只看该作者

那就举个例了吧

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

使用特权

评论回复
11
forthlab| | 2007-12-10 12:55 | 只看该作者

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

我觉得CW比keil的c51要专业的多.

使用特权

评论回复
12
afanti| | 2007-12-10 14:23 | 只看该作者

re

萝卜白菜,各有所爱。
有人爱萝卜,也有人爱白菜。

使用特权

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

本版积分规则

222

主题

15443

帖子

34

粉丝