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變量,所以這涉及到代碼優化的問題,遇到具體問題時,在運行速度和代碼大小之間取得適合自己的情況。

我在青春的田野上播種勤奮與努力,希望能在未來收獲成熟和睿智...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM