C249: 'DATA': SEGMENT TOO LARGE“解決方法 | keilC51設置編譯模式:SMALL,COMPACT,LARGE


“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存儲器類型具有相同效果。”
摘自《Keil Cx51 V7.0單片機高級語言編程與uVision2應用實踐》

如何設置編譯模式:左鍵單擊Target選擇“Options for Target'Target1'”就會出來一個框,在memory model中選擇就可以了。

 


免責聲明!

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



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