新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > KEIL編譯錯誤之xdata空間的代碼

        KEIL編譯錯誤之xdata空間的代碼

        作者: 時間:2016-11-26 來源:網絡 收藏
        在用TFT和DS18B20做一個溫度檢測系統,利用Keil C51編程時,發現程序邏輯上沒有錯誤,但在連接時卻出現了錯誤,如下:

        *** ERROR L107: ADDRESS SPACE OVERFLOW
        SPACE:DATA
        SEGMENT: ?DT?MAIN
        LENGTH:0004H
        *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
        SYMBOL:T
        SEGMENT: ?DT?MAIN
        *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
        SYMBOL:TEMPL
        SEGMENT: ?DT?MAIN
        *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
        SYMBOL:TEMPH
        SEGMENT: ?DT?MAIN
        *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
        SYMBOL:?_LCDSHOW_UCHARNUMBER?BYTE
        SEGMENT: ?DT?_LCDSHOW_UCHARNUMBER?MAIN
        *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
        SYMBOL:?_RECTANGLE?BYTE
        SEGMENT: ?DT?_RECTANGLE?MAIN
        Program Size: data=145.0 xdata=0 code=8309
        Target not created

        本文引用地址:http://www.104case.com/article/201611/321679.htm


        該錯誤提示說明data空間已經不夠用,原因是你可能有好多函數,而函數內部的局部變量又沒有定義其空間,這種情況下,系統會將變量分配到你在Otions for Target 對話框里的設置的空間。如果你在下圖所示中的 Memory Model 里設置成 Small:variables in DATA,則DATA空間很快便用完,導致data空間不夠用。

        解決的辦法有兩種,一是通過更改Memory Model設置,可以設置成pdata或xdata,以便有足夠大的空間,但這又帶來新的問題,程序運行速度減慢,而且code代碼也會加大,因為如果一個局部變量被存放在了xdata空間,匯編語言訪問xdata空間的代碼大小要比訪問data空間的代碼大,變量一旦很多,程序的代碼也會逐漸增大;二是根據自己的要求設置變量的空間。

        所以這涉及到代碼優化的問題,遇到具體問題時,在運行速度和代碼大小之間取得適合自己的情況。



        關鍵詞: KEIL編譯錯

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 电白县| 巨野县| 南京市| 县级市| 花莲县| 淅川县| 伊通| 元氏县| 璧山县| 临湘市| 丰都县| 合川市| 邹平县| 将乐县| 星子县| 依安县| 治多县| 思南县| 修水县| 五原县| 旬邑县| 咸宁市| 仙居县| 绩溪县| 和政县| 梁平县| 抚顺县| 大埔县| 杭州市| 梅州市| 连南| 滁州市| 玉林市| 门头沟区| 大悟县| 毕节市| 盐津县| 六盘水市| 阜康市| 安康市| 西和县|