搜索
bottom↓
回复: 15

关于*** WARNING L13: RECURSIVE CALL TO SEGMENT问题的解决办法!

[复制链接]

出0入0汤圆

发表于 2012-4-9 21:36:10 | 显示全部楼层 |阅读模式
是关于傻孩子菜单:
  
这些数据如果定义在data区,调用DataSetFuc函数则不会出现*** WARNING L13: RECURSIVE CALL TO SEGMENT这个警告
但是因为89C52的内存有限所以定义在Code区。
这不:
*** WARNING L13: RECURSIVE CALL TO SEGMENT
    SEGMENT: ?CO?MAIN
    CALLER:  ?PR?_DS1302TIMEREAD?MAIN
*** WARNING L13: RECURSIVE CALL TO SEGMENT
    SEGMENT: ?CO?MAIN
    CALLER:  ?PR?_LCD1602WRITESTRING?MAIN
*** WARNING L13: RECURSIVE CALL TO SEGMENT
    SEGMENT: ?CO?MAIN
    CALLER:  ?PR?TIMESETFUC?MAIN
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?DS1302INITIAL?MAIN
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?KEYBORDSCAN?MAIN
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?TIMEDISPLAYFUC?MAIN
Program Size: data=9.2 xdata=50 code=6176
creating hex file from "CLockV1.2Project"...
"CLockV1.2Project" - 0 Error(s), 6 Warning(s).

3个递归调用的警告:

请问为什么,程序里并没有调用自己也没被中断调用的啊?该如何解决啊??

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入17汤圆

发表于 2012-4-9 21:55:31 | 显示全部楼层
就是因为程序没有调用这些函数,Keil才警告你

出0入0汤圆

 楼主| 发表于 2012-4-9 22:41:15 | 显示全部楼层
hhxb 发表于 2012-4-9 21:55
就是因为程序没有调用这些函数,Keil才警告你

估计你可能至从下半截开始看是的!并非你所说没有调用的哈!

出0入17汤圆

发表于 2012-4-9 22:50:39 | 显示全部楼层
L13错误,定义全局变量时,加上xdata就可以了。

出0入0汤圆

 楼主| 发表于 2012-4-9 23:06:49 | 显示全部楼层
------------------------------------------------------------------------
楼上的:我说的很清楚定义在DATA区是警告是没有但是AT89C52的DATA有限de !
------------------------------------------------------------------------
还有办法没?

出0入17汤圆

发表于 2012-4-10 10:44:25 | 显示全部楼层
本帖最后由 hhxb 于 2012-4-10 10:46 编辑
HeP028 发表于 2012-4-9 23:06
------------------------------------------------------------------------
楼上的:我说的很清楚定义在D ...


网上说L13可能是堆栈溢出,也就是内存不足,现在的单片机基本都是52的增强型,有更多内存;干嘛非要用AT89c52;










网上前辈写的
http://hi.baidu.com/pnalson/blog ... 22d50229388a69.html
keil C51单片机内存优化--转
2009年11月27日 星期五 10:48
52本身有256B的数据存储区,如果没在意一些细节,很容易出现RAM超过128就报错的情况。现讲其问题解释如下:

最常见的是以下两种
① 超过变量128后必须使用compact模式编译
   实际的情况是只要内存占用量不超过 256.0 就可以用 small 模式编译
② 128以上的某些地址为特殊寄存器使用,不能给程序用.与 PC 机不同,51 单片机不使用线性编址,特殊寄存器与 RAM 使用重复的重复的地址。但访问时采用不同的指令,所以并不会占用 RAM 空间。

③是否把一些固定的代码存贮到了CODE区。如果把没变化的数据也存储到DATA去,就太浪费了!

    由于内存比较小,一般要进行内存优化,尽量提高内存的使用效率。

    以 Keil C 编译器为例,small 模式下未指存储类型的变量默认为data型,即直接寻址,只能访问低 128 个字节,但这 128 个字节也不是全为我们的程序所用,寄存器 R0-R7必须映射到低RAM,要占去 8 个字节,如果使用寄存组切换,占用的更多。

    所以可以使用 data 区最大为 120 字节,超出 120 个字节则必须用 idata 显式的指定为间接寻址,另外堆栈至少要占用一个字节,所以极限情况下可以定义的变量可占 247 个字节。当然,实际应用中堆栈为一个字节肯定是不够用的,但如果嵌套调用层数不深,有十几个字节也够有了。

出0入0汤圆

发表于 2012-4-10 13:01:34 | 显示全部楼层
Warning L13, 如果你确认没有递归调用, 直接忽略, 一般使用了函数指针或放入code区的字符串很容易出现这个Warning, 要么不理,要么自行添加OVERLAY, 参考:http://www.keil.com/support/docs/2379.htm
Warning L16 用REMOVEUNUSED (http://www.keil.com/support/man/docs/lx51/lx51_removeunused.htm)

出0入0汤圆

发表于 2012-4-10 13:45:20 | 显示全部楼层
这估计跟你的工程文件组织还有关系

出0入0汤圆

 楼主| 发表于 2012-4-11 12:26:49 | 显示全部楼层
没人愿意帮忙啊?

出0入0汤圆

 楼主| 发表于 2012-4-25 14:22:37 | 显示全部楼层
本帖最后由 HeP028 于 2012-4-25 14:23 编辑



问题还是没解决,请大大门帮个忙看下,AT89S52 + LCD1602移植的菜单,

如果将定义的菜单数据存放在CODE区就会出现*** WARNING L13: RECURSIVE CALL TO SEGMENT这样的警告。且工作不正常!

存放在内存区就不会,因为使用的89S52。所以只能存在ROM区,请大家帮帮忙看下如何能解决这个问题 完整的工程上面已上传,谢谢了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-4-25 15:52:20 | 显示全部楼层
人呢??

出0入0汤圆

发表于 2012-4-25 20:10:41 | 显示全部楼层
本帖最后由 lryxr2507 于 2012-4-25 20:12 编辑

回复楼主,从你的态度来看可能大家不会怎么愿意帮你的,并且有人已经帮助你了,但你不愿意详细去理解,那就只有爱莫能助了.

出0入0汤圆

 楼主| 发表于 2012-4-25 20:35:30 | 显示全部楼层
lryxr2507 发表于 2012-4-25 20:10
回复楼主,从你的态度来看可能大家不会怎么愿意帮你的,并且有人已经帮助你了,但你不愿意详细去理解,那就只有 ...

敢问兄台我的态度的怎么了呢?

你怎么就知道我没就没去看?另外知识有限我自己确实解决不了。

不过我看着你这句话我确实态度好不下去不愿意帮助别人就闭上你的嘴吧!论坛像你这种人多了去了,帮不上别人呢还JJYY说别人怎么的怎么的!

出0入0汤圆

发表于 2012-4-25 20:42:39 | 显示全部楼层
之前遇到过,是程序里有没调用的函数

出0入0汤圆

 楼主| 发表于 2012-4-25 20:48:53 | 显示全部楼层
farrtone 发表于 2012-4-25 20:42
之前遇到过,是程序里有没调用的函数

不是这个问题。没有调用是L16....
这个问题是L13警告:还是指针的问题!

出0入0汤圆

发表于 2013-9-22 20:42:35 | 显示全部楼层
HeP028 发表于 2012-4-25 14:22
问题还是没解决,请大大门帮个忙看下,AT89S52 + LCD1602移植的菜单,

如果将定义的菜单数据存放在CODE ...

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

本版积分规则

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

GMT+8, 2024-7-23 14:19

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

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