2010-03-15 72 views
1

我想使用Keil uvision 3編譯C代碼。只有當我通過選擇選項xdata作爲目標使用大內存模型時,纔會編譯整個代碼。要使用這個模型,我必須使用外部數據RAM,這對我來說由於某些原因是不可能的。使用keil uvision問題3

所以我決定去用pdata選項。任何人都可以幫助我完成使用pdata的確切步驟嗎?我正在使用89V51RD2。我與像BL51 MISC的選項很多困惑,BL51定位等

回答

1

你可能有更好的運氣在

http://www.keil.com/forum

在Keil的官方論壇上發帖這樣做的NXP P89V51RD2是8051與導數,根據到數據手冊,1KB的片上RAM。如果你的程序不適合那麼多的空間,你會有來添加外部RAM。

PDATA允許您使用「P」年齡訪問XDATA。這是而不是額外的內存。如果你需要更多的空間,你應該考慮優化你的內存使用情況,否則你將不得不增加額外的XDATA資源。

參考:C51: USING PDATA MEMORY

披露:我對凱爾/ ARM

0

工作,如果你真的沒有任何可用的外部數據RAM,那麼PDATA選項不會幫你。 PDATA位於與XDATA不同的邏輯地址空間中,但使用相同的物理空間

例如,您使用的微控制器包含1kB的RAM。所有1024個字節都可以作爲XDATA存儲器訪問(地址XDATA:0x0000到XDATA:0x03FF)。 256字節(一次)可以作爲PDATA存儲器訪問(地址PDATA:0x00到PDATA:0xFF)。假設您設置了微控制器,使用前256個字節的RAM作爲PDATA存儲器。這意味着PDATA:0x00和XDATA:0x0000指向RAM的同一物理字節。如果你不小心,你會嘗試將兩個不同的值存儲在相同的物理內存中,其中一個值將被覆蓋並丟失。

如果您已經在使用您的所有XDATA存儲器,則需要使用DATA存儲器或IDATA存儲器才能獲得更多。如果您確實使用IDATA內存,您需要非常小心您留出足夠的空間,以便您存儲的值不會被在IDATA處開始的堆棧意外覆蓋:0xFF並向IDATA增長:0x00

編輯:對不起,我沒有注意到這個問題是兩歲。不過,希望這有助於某人。