minhead
驱动牛犊
驱动牛犊
  • 注册日期2003-05-15
  • 最后登录2006-05-28
  • 粉丝0
  • 关注0
  • 积分98分
  • 威望14点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:2784回复:1

keilC中变量存储器模式的设置等问题请假!

楼主#
更多 发布于:2005-08-08 15:43
  我按默认设置时为small,但是我的编译通过后连接生成不了下载文件,发现
*** ERROR L107: ADDRESS SPACE OVERFLOW(好多这种报错)
Program Size: data=337.0 xdata=31277 const=0 code=17456,好像data太大了超过了256字节,我把模式改为large后通过了,生成了下载文件!
Program Size: data=19.0 xdata=31609 const=0 code=21233
这个时候信息看到data部分少了,xdata多了,code也多了!以下问题不解:
1。我代码没改写,code为什么多了?
2。我的主函数中调用的函数不多,也就是说整个编译连接的源文件有多个,而其中的有的文件中的函数我在主函数中没有调用,就单纯生成代码。我想问的是,对于不调用的函数,是否也是会单独给其变量分配空间,这些函数的变量不和其它的函数进行数据覆盖而导致占用的data比较多?如果我实现完全了,对相应的函数都调用了(目前处于调试,所以主函数中调用的函数少),函数之间连接器会默认进行数据覆盖而使实际使用的data不至于很多?
3。根据我自己想法,程序顺序执行,在执行到某部分函数时候才给其变量分配空间,用完就释放了,应该不至于超过256字节的。是不是要设置数据覆盖?在哪里设置呢,我看了书说是好像是默认为覆盖,连接时候连接器会默认覆盖的!假如我的data不够用,是不是只有设置存储器模式为large了?那样我知道会影响访问速度。large模式下面,是按什么顺序把变量存储在data还是xdata呢?

注:我以前没用过KeilC, 写过汇编。所以有好多问题对于大家来说比较弱!请大家多指教啊!请大家就上面三个问题做个解答,谢谢了。
我的现在是在调试一个USB主机的代码(参考程序),所以开始只是调用一些基本的读写函数,其他的好多函数在主程序中没有调用,出现了此问题!原来参考程序在主程序中调用了另外的一些函数!就能连接成功生成下载文件而没问题!所以产生上述问题!谢谢大家!
computer00
驱动小牛
驱动小牛
  • 注册日期2004-09-27
  • 最后登录2009-08-22
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望120点
  • 贡献值0点
  • 好评度110点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-28 18:51
1.因为把一些变量放在外部RAM去了,所以访问时需要更多的代码,因此code大了。

2.有这个可能。没有调用,它不知道如何处理它门好。

3.默认是会数据覆盖的.变量太多,想想办法,减少一些,例如尽量用char型的等等。如果使用xdata,你外部必须挂接一个SRAM.

把不用的函数代码删掉,也许就解决问题了。
博客Http://computer00.21ic.org
游客

返回顶部