*** ERROR L107: ADDRESS SPACE OVERFLOW

MacleChen發表於2014-05-14
我編譯的一個C語言程式出現了這樣的錯誤,不能生成HEX檔案,請問是什麼原因,該怎麼解決,謝謝!
*** WARNING L15: MULTIPLE CALL TO SEGMENT
    SEGMENT: ?PR?LCD_WRITE?1001
    CALLER1: ?PR?INT_0?1001
    CALLER2: ?C_C51STARTUP
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA    
    SEGMENT: _DATA_GROUP_
    LENGTH:  0031H
Program Size: data=126.2 xdata=0 code=2838
Target not created
我使用的晶片是89S52




解決方案:
 
1.右鍵單擊Target選擇“Options for Target'Target1'”就會出來一個框,在memory model中選擇
compact:variables in pdata 就可以了。
 
“Keil Cx51編譯器提供三條編譯模式控制命令:SMALL,COMPACT,LARGE,它們對變數儲存器空間的影
響如下。
SMALL:所有變數都被定義在8051微控制器的片內RAM中,對這種變數的訪問速度最快。另外,堆疊也必
須位於片內RAM中,而堆疊的長度是很重要的,實際棧長取決與不同函式的巢狀深度。採用SMALL編譯
模式與定義變數時指定data儲存器型別具有相同效果。


COMPACT:所有變數被定義在分頁定址的片外XRAM中,每一頁片外XRAM的長度為256位元組。這時對變數
的訪問是通過暫存器間接定址(MOVX @R0,MOVX @R1)進行的,變數的低8位地址由R0和R1確定,變數
的高8位地址由P2口確定。採用這種模式時,必須適當改變配置檔案STARTUP.A51中的引數:PDATASTART
和PDATALEN;同時還必須對uVision2的“Options選項/BL51 Locator 標籤頁/Pdata框”中鍵入合適的
地址引數,以確保P2口能輸出所需要的高8位地址。採用COMPACT編譯模式與定義變數時指定pdata儲存器
型別具有相同效果。


LARGE:所有變數被定義在片外XRAM中(最大可達64KB),使用資料指標DPTR來間接訪問變數
(MOVX @DPTR),這種編譯模式對資料訪問的效率最低,而且將增加程式的程式碼長度。採用LARGE
編譯模式與定義變數時指定xdata儲存器型別具有相同效果。”

相關文章