zoukankan      html  css  js  c++  java
  • ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT 的解决办法

    今天接着写一个单片机程序,出现这个问题,我仔细查看每一句语句,发现逻辑上没有错误,但就是出现这个问题,不能生成目标文件:

    *** ERROR L107: ADDRESS SPACE OVERFLOW

        SPACE:   DATA   

        SEGMENT: ?DT?USART_READWRITE

        LENGTH:  007AH

    *** ERROR L118: REFERENCE MADE TO ERRONEOUS EXTERNAL

        SYMBOL:  USARTREADWAVEDATA

        MODULE:  .Timer_DAC.obj (TIMER_DAC)

        ADDRESS: 0367H

    *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT

        SYMBOL:  USARTREADWAVEDATA

        SEGMENT: ?DT?USART_READWRITE

    *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT

        SYMBOL:  USARTDATACOUNT

        SEGMENT: ?DT?USART_READWRITE

    Program Size: data=140.3 xdata=10 code=968

    Target not created

    上网查了下,找到了具体的原因及其相应的解决方案:

    ==============================================================

    出现以上错误的原因主要是第一个原因,第一个原因导致了它下面所有错误,第一个原因是:

        ERROR L107: ADDRESS SPACE OVERFLOW

        SPACE:   DATA   

        SEGMENT: ?DT?GMNS_3V4

        LENGTH: 0014H

    说明data空间已经不够用,原因是你可能有好多函数,而函数内部的局部变量又没有定义其空间,这种情况下,系统会将变量分配到你在Otions for Target 对话框里的设置的空间。如果你在下图所示中的 Memory Model 里设置成 Small:variables in DATA,则DATA空间很快便用完,导致data空间不够用。解决的办法有两种,

    一是通过更改Memory Model设置,可以设置成pdata或xdata,以便有足够大的空间,但这又带来新的问题,程序运行速度减慢,而且code代码也会加大,因为如果一个局部变量被存放在了xdata空间,汇编语言访问xdata空间的代码大小要比访问data空间的代码大,变量一旦很多,程序的代码也会逐渐增大;

    二是根据自己的要求设置变量的空间。将data变量改为xdata变量,所以这涉及到代码优化的问题,遇到具体问题时,在运行速度和代码大小之间取得适合自己的情况。

    我在青春的田野上播种勤奋与努力,希望能在未来收获成熟和睿智...
  • 相关阅读:
    PAT B1045 快速排序 (25 分)
    PAT B1042 字符统计 (20 分)
    PAT B1040 有几个PAT (25 分)
    PAT B1035 插入与归并 (25 分)
    PAT B1034 有理数四则运算 (20 分)
    PAT B1033 旧键盘打字 (20 分)
    HDU 1231 最大连续子序列
    HDU 1166 敌兵布阵
    HDU 1715 大菲波数
    HDU 1016 Prime Ring Problem
  • 原文地址:https://www.cnblogs.com/alanfeng/p/5578630.html
Copyright © 2011-2022 走看看