找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 450|回复: 0
打印 上一主题 下一主题
收起左侧

应对KEIL C51错误的覆盖警告信息L48处置IGNORED RECURSIVE CALL

[复制链接]
跳转到指定楼层
楼主
因为项目编译结果比较大,几乎超出51单片机程序空间的64K限制


linking...
Program Size: data=47.3 xdata=8168 const=1694 code=52081


这样无法增加新的功能模块,原来使用7级编译优化改为9级,这样就出来了链接警告信息:


linking...


*** WARNING L48: IGNORED RECURSIVE CALL
    CALLED:  _RX8130_WRIT_BYTE/RTC
    CALLER:  RX8130_STOP/RTC


Program Size: data=47.3 xdata=8168 const=1694 code=38305


void Rx8130_Stop(void) {
  SDA_OUT();
  RTC_SDA=0;
  RTC_SCL=1;
  Delayus();//15
  RTC_SDA=1;
  Delayus();//15
  SDA_IN();
}




void Rx8130_Writ_Byte(U8 bhDat) {
U8 bh=8;
  
  SDA_OUT();
  for(;bh>0;bh--) {
    if(bhDat&0x80)   
      RTC_SDA=1;
    else           
      RTC_SDA=0;
    bhDat=(bhDat<<1);
    Delayus();
    RTC_SCL=1;
    Delayus();
    RTC_SCL=0;
    Delayus();
  }
  Rx8130_Cack();
}
项目中只有RX8130_WRIT_BYTE对RX8130_STOP的调用,不会存在反过来的调用关系,明显是KEIL C51的链接器错误的定位了这个问题,其实不处理是没有问题的,但这么多年来对项目要求一致遵循零错误零警告的原则。


这个时候就需要人工告诉链接器,RX8130_STOP对RX8130_WRIT_BYTE没有调用关系,使用了OVERLAY指令。


OVERLAY(?PR?RX8130_STOP?RTC ~ ?PR?_RX8130_WRIT_BYTE?RTC)


顺利编译和链接完成。

捕获.JPG (75.1 KB, 下载次数: 92)

捕获.JPG

评分

参与人数 1黑币 +90 收起 理由
admin + 90 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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