加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT问题及解决方法

(2013-04-23 20:12:37)
分类: C51
在使用C8051F编程时,出现以下问题:
 
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  ?_NRF24L01_X_READ_RX_PAYLOAD?BYTE
    SEGMENT: ?DT?_NRF24L01_X_READ_RX_PAYLOAD?NRF24L01_X
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  ?_NRF24L01_X_WRITE_PIPE_ADDR?BYTE
    SEGMENT: ?DT?_NRF24L01_X_WRITE_PIPE_ADDR?NRF24L01_X
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  ?_NRF24L01_X_READ_PIPE_ADDR?BYTE
    SEGMENT: ?DT?_NRF24L01_X_READ_PIPE_ADDR?NRF24L01_X
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  ?_NRF24L01_X_WRITE_REG_MULTIBYTES?BYTE
    SEGMENT: ?DT?_NRF24L01_X_WRITE_REG_MULTIBYTES?NRF24L01_X
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  ?_NRF24L01_X_READ_REG_MULTIBYTES?BYTE
    SEGMENT: ?DT?_NRF24L01_X_READ_REG_MULTIBYTES?NRF24L01_X
Program Size: data=384.0 xdata=386 code=5834
   从提示中可以看出,貌似直接把函数给忽略了。从上面的Program Size可以看出data=384,而实际上我使用的是C8051F380,片内RAM仅有256Byte.原来是RAM溢出了。

    同时,从第一个error看提示什么,如下:
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA    
    SEGMENT: ?DT?_NRF24L01_X_SET_PIPE?NRF24L01_X
    LENGTH:  000AH
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA    
    SEGMENT: ?DT?_NRF24L01_X_SEARCH_NEXT_CLEAN_RF_CH?NRF24L01_X
    LENGTH:  0009H
.......
    从上面可以看出果然是溢出了。
------------------------------------------------------------------------------------------------
原因:
    从上面的分析可以看出data空间已经不够用,原因可能是使用了好多函数,而函数内部的局部变量又没有定义其空间,这种情况下,系统会根据编译器的设置进行分配的,将变量分配到编译器在Otions for Target 对话框里的设置的空间。我使用的是Keil C51编译器,其他编译器可能不一样。

    如下图所示中的 Memory Model 里设置成 Small:variables in DATA,则DATA空间很快便用完,导致data空间不够用。
http://s16/mw690/69d69315tdb0650f4062f&690L105: PUBLIC REFERS TO IGNORED SEGMENT问题及解决方法" TITLE="ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT问题及解决方法" />

-------------------------------------------------------------------------------------------
解决的办法有两种:
    一是更改Memory Model设置,可以设置成pdata或xdata,以便有足够大的空间。但这又带来新的问题,程序运行速度减慢,而且code代码也会加大,因为如果一个局部变量被存放在了xdata空间,汇编语言访问xdata空间的代码大小要比访问data空间的代码大,变量一旦很多,程序的代码也会逐渐增大;
    二是代码优化。根据自己的要求设置变量的空间。在运行速度和代码大小之间取得适合自己的情况。






0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有