标题: 应对KEIL C51错误的覆盖警告信息L48处置IGNORED RECURSIVE CALL [打印本页]

作者: nearsea    时间: 2024-1-19 12:26
标题: 应对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, 下载次数: 130)

捕获.JPG





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1