搜索
bottom↓
回复: 45

怎样让keil禁止给uncalled segment分配空间?

  [复制链接]

出0入0汤圆

发表于 2011-10-2 17:08:47 | 显示全部楼层 |阅读模式
最近在用51单片机SD卡+VS1003来做MP3
可是在调试的时候遇到一个很郁闷的问题,我在main函数里只是调用了一个简短的函数,还有好多函数只是定义了调试过了,还没使用到,但是我这些都放在一个工程里编译就会报错,说是
ADDRESS SPACE OVERFLOW
SPACE: DATA
...
郁闷了,我的main函数里只调用了一个简单的函数啊为什么没调用的函数KEIL也把它给塞进HEX文件里去。。。
请大虾们解决一下小弟这个问题...

(我试过把Memory Model设置为Large (我的STC12C5A60S2内部有1280的XDATA), 可以用,但是考虑到队友那里这样设置的时候不能使用红外的功能了,不知道是为什么。。。,所以不想改Memory Model。更不想手动注释这些没调用的函数,那样太麻烦了。。。)

出0入0汤圆

发表于 2011-10-3 14:28:38 | 显示全部楼层
把target options中的device页中选上"Use LX51 ...",然后在LX51 Misc页中的Misc Control中填入"REMOVEUNUSED",确认后重新编译即可自动去掉未调用的函数。

如下图:

(原文件名:0.jpg)


(原文件名:1.jpg)

出0入0汤圆

 楼主| 发表于 2011-10-3 04:35:39 | 显示全部楼层
没人回复。。。自己顶。。。。
好奇怪,现在又没这个问题了。。。印象中我好像没改什么东西啊。。。这是为什么
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?SD_WAITREADY?MMC_SD
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_SD_GETCID?MMC_SD
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?SD_GETCAPACITY?MMC_SD
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_SD_WRITESINGLEBLOCK?MMC_SD
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_SD_READ_BYTES?MMC_SD
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_DELAY14_6US?UTILITIES
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?VS_SOFTRESET?VS1003
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_VS1003B_WRITEDAT?VS1003

出0入0汤圆

 楼主| 发表于 2011-10-3 04:39:48 | 显示全部楼层
如果。。。。原来。。。啊!!!!!!!!

如果我把main写成mian。。。
Build target 'Target 1'
compiling main.c...
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?MIAN?MAIN
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?SD_WAITREADY?MMC_SD
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_SD_GETCID?MMC_SD
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?SD_GETCAPACITY?MMC_SD
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_SD_WRITESINGLEBLOCK?MMC_SD
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_SD_READ_BYTES?MMC_SD
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_DELAY14_6US?UTILITIES
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?VS_SOFTRESET?VS1003
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_VS1003B_WRITEDAT?VS1003
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA   
    SEGMENT: ?DT?_GETSECTORADDR?FAT_FS
    LENGTH:  0003H
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA   
    SEGMENT: ?DT?_SETNEXTSECTOR?FAT_FS
    LENGTH:  0003H
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA   
    SEGMENT: ?DT?_SETNEXTCLUSTER?FAT_FS
    LENGTH:  0003H
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA   
    SEGMENT: ?DT?_FILEFIRSTSECTOR?FAT_FS
    LENGTH:  0003H
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA   
    SEGMENT: ?DT?_SD_GETCID?MMC_SD
    LENGTH:  0003H
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA   
    SEGMENT: ?DT?_SD_GETCSD?MMC_SD
    LENGTH:  0003H
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA   
    SEGMENT: ?DT?_VS_WRITEREG?VS1003
    LENGTH:  0003H
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA   
    SEGMENT: ?DT?MIAN?MAIN
    LENGTH:  0001H
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA   
    SEGMENT: ?DT?_VS_SINTEST?VS1003
    LENGTH:  0001H
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  MAIN
    MODULE:  D:\PROGRAM FILES\KEIL\C51\LIB\C51S.LIB (?C_INIT)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  MAIN
    MODULE:  D:\PROGRAM FILES\KEIL\C51\LIB\C51S.LIB (?C_INIT)
    ADDRESS: 5772H
Program Size: data=152.0 xdata=838 code=24081
Target not created

出0入0汤圆

 楼主| 发表于 2011-10-3 04:44:15 | 显示全部楼层
可是,我一直都没改这个main。。。应该不是这个原因才对啊???
还能有什么原因???求解答啊。。。。。。。。。。。。。。。。。。。

出0入0汤圆

 楼主| 发表于 2011-10-4 02:15:02 | 显示全部楼层
说实话Keil这一点真的挺烂的,请看证据:

(原文件名:1.png)


(原文件名:2.png)

我看过网上有文章说加编译开关,可是如果自己的函数库大了的话这也太麻烦了,这明明就是一个很简单的问题,为什么keil公司就是这么笨呢?

出0入0汤圆

 楼主| 发表于 2011-10-4 03:23:58 | 显示全部楼层
回复【4楼】yaxi1984
-----------------------------------------------------------------------

感谢你的帮助,问题圆满解决了

(希望我下面的内容会对网友有帮助)

首先我一开始照你的意思设置了以后遇到了错误,说要我升级到PK51,我用的是KEIL uvision 4,可能是因为当初没破_解好,去网上找个注_册机就解决了

然后我发现原来这个指令在KEIL的帮助文档里有的,所以说一定要学会看帮助文档才行啊。。。

(原文件名:a.png)


(原文件名:b.png)


(原文件名:c.png)

呵呵,设置成功以后效果不错~

data的大小少了很多了~

出0入0汤圆

发表于 2012-3-28 23:10:47 | 显示全部楼层
好东西呀 MARK一下了

出0入0汤圆

发表于 2012-3-29 00:02:04 | 显示全部楼层
学到了一招,谢谢

出0入0汤圆

发表于 2012-4-2 17:05:19 | 显示全部楼层
mark 正被这个问题烦恼
头像被屏蔽

出0入0汤圆

发表于 2012-4-24 09:29:55 | 显示全部楼层
cool !

出0入0汤圆

发表于 2012-4-24 09:53:26 | 显示全部楼层
学到一招!!!!!!!!!!!!!

出0入0汤圆

发表于 2012-4-24 10:19:15 来自手机 | 显示全部楼层
以前没用的都是注释掉,学一下

出0入0汤圆

发表于 2012-4-24 10:27:27 | 显示全部楼层
早就应该学会看帮助文档了,里面包括了所有的警告信息和错误信息.

出0入0汤圆

发表于 2012-4-24 10:35:38 | 显示全部楼层
这招很强大!我编译CH376S的工程试试,这里面有很多函数都没被调用。

出0入0汤圆

发表于 2012-4-26 23:20:00 | 显示全部楼层
好资料备用

出0入0汤圆

发表于 2012-4-26 23:29:21 | 显示全部楼层
备注:以后我也试试“瘦身编译法” 哈哈

出100入143汤圆

发表于 2012-4-27 06:12:25 来自手机 | 显示全部楼层
一直想找这个功能,不知道别的片子行不

出0入0汤圆

发表于 2012-4-27 08:07:19 | 显示全部楼层
我也来学习“瘦身编译法”

出0入0汤圆

发表于 2012-4-27 08:29:37 | 显示全部楼层
这一点还真没注意到。

出0入0汤圆

发表于 2012-4-27 08:58:23 | 显示全部楼层
嗯   不错   学习了

出0入0汤圆

发表于 2012-5-8 08:40:40 | 显示全部楼层
MARK,方法很不错

出0入0汤圆

发表于 2012-5-8 10:21:14 | 显示全部楼层
MARK,学习了

出0入0汤圆

发表于 2012-5-8 20:44:54 | 显示全部楼层
哇!一直没注意到呢   厉害啊   

出0入0汤圆

发表于 2012-5-29 10:18:20 | 显示全部楼层
不错。。。。 学习了!!!!

出0入0汤圆

发表于 2012-5-29 11:26:57 | 显示全部楼层
学到一招啊
头像被屏蔽

出0入0汤圆

发表于 2012-6-5 10:43:06 | 显示全部楼层
记号记号

出0入0汤圆

发表于 2012-7-5 21:22:09 | 显示全部楼层
我也遇到过这种情况!!!!!!!!

出0入0汤圆

发表于 2012-8-31 18:19:35 | 显示全部楼层
学习了…………

出0入0汤圆

发表于 2012-8-31 18:40:17 | 显示全部楼层
好东西,多谢分享!

出0入0汤圆

发表于 2012-8-31 19:11:23 来自手机 | 显示全部楼层
强帖留名.....

出0入0汤圆

发表于 2012-9-1 08:09:46 来自手机 | 显示全部楼层
没有调用的函数,keil编译器则认为有可能是中断函数,所以会把它塞进HEX文件里

出0入0汤圆

 楼主| 发表于 2012-9-1 17:57:01 | 显示全部楼层
信天游 发表于 2012-9-1 08:09
没有调用的函数,keil编译器则认为有可能是中断函数,所以会把它塞进HEX文件里 ...

不是的,技术上完全是可以区别中断函数与普通函数,如 C51 的中断函数会加入 interrupt 关键字,而在 MDK中如 STM32 的中断函数的名字则是在启动代码中都有被引用,
也就是说,原则上除了特殊关键字声明外,所有所有没有被引用函数都可以被除去,这是很基本的代码优化。

出0入0汤圆

发表于 2012-9-1 21:22:14 | 显示全部楼层
受教了,啧啧

出0入0汤圆

发表于 2012-11-30 21:34:19 | 显示全部楼层

出0入0汤圆

发表于 2012-12-6 23:01:41 | 显示全部楼层

出0入0汤圆

发表于 2012-12-7 00:06:24 来自手机 | 显示全部楼层
不错,很实用

出0入0汤圆

发表于 2012-12-8 01:00:51 | 显示全部楼层
不错,学到一招!!~~

出0入0汤圆

发表于 2012-12-10 17:30:53 | 显示全部楼层
支持楼主

出0入0汤圆

发表于 2012-12-10 18:12:30 | 显示全部楼层
KEIL不是笨......因为如果你的码有多任务的东东,它就不能随便去掉那些未调用的函数.

出0入0汤圆

发表于 2013-7-24 23:25:49 | 显示全部楼层
好贴,学习一下

出45入88汤圆

发表于 2014-11-19 16:32:27 | 显示全部楼层
为什么我用这个方法报错?
*** ERROR L121: IMPROPER FIXUP
    MODULE:  keyboard.obj (KEYBOARD)
    SEGMENT: ?PR?KEYPRESSTIME?KEYBOARD
    OFFSET:  000001H

出0入0汤圆

发表于 2014-11-19 18:53:17 | 显示全部楼层
又学到了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-1 17:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表