天天看點

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

ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT 的解決辦法

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

轉載于:https://www.cnblogs.com/alanfeng/p/5578630.html