Keil的片外RAM區支持設置

轉自http://blog.mcuol.com/User/jaywei518/Article/57014_1.htm

還沒看會  先轉過來收藏一下

最近對ucosii很感興趣,主要是看linux一頭霧水,只知道怎麼去用linux,至於裏面的機理完全是不懂,任務如何調度,消息如何傳遞。這些在linux隱藏的很深有時經過層層剝繭才能最終找到實現的代碼,這樣使我找來找去就失去了信心,但ucosii主要是針對8位16位低端單片機,代碼量當然和linux沒法比,但是我想說的是有時候我們只知道去追求最火的最流行的,但往往卻學不到什麼本質的東西。ARM+LINUX固然高端固然牛逼,但有些場合完全用不上這麼高端的東西,比如前一陣子在網上看到一個電動牙刷,裏面就嵌入了一個51的芯片,話說一個牙刷用ARM用LINUX不是有點小題大做了嗎,況且成本那麼高,又有誰會去用呢?最近我在做一項工作,就是在51上實現ucosii操作系統,並且加上之前學過的ZNFAT文件系統,這樣一個小型的系統就成型了。目前已略有小成(相關代碼和解釋會在我的其他文章裏說明哈哈),話說多了,我們言歸正傳,今天說的這個問題是我在做ucosii+znfat時遇到的。因爲ucosii的代碼量很大(相對其他裸跑代碼)加上一個文件系統,這樣導致我的ram和rom區都不夠了,在KEIL編譯的時候就出現瞭如下的錯誤。



 

錯誤提示說是pdata段不夠了,顯然這裏涉及到了幾個概念,即data pdata idata 和xdata 這裏特地百度了一下 如圖

以上的概念亂七八糟的,其實說白了就是我的芯片ram不夠了需要擴展。

 

這裏有的人說可以通過設置使用片外ram,的確,KEIL支持選擇片外RAM,如圖

 

在設置裏面我們可以通過選擇Large模式,即變量都存在xdata外部,注意如果選擇這個模式,那麼即使有片內RAM keil也是不用的,也就是說直接選擇使用外部擴展的ram,如果選擇small模式,如圖

 

並不是說所有變量只能存在data區,我們仍可以通過xdata如unsigned xdata num來把變量num放到外部存儲ram中。我用的芯片是宏晶公司的stc12c5a60s2,除了和一般51自帶的256字節外,還外擴了1024字節的外部ram就是通過xdata聲明訪問的。但是很可惜我的RAM區編譯出來的結果是如圖


是1419字節,顯然超過了256+1024字節,所以即使有芯片自帶的外部RAM 也是無濟於事,還好我做的這塊51板子(在我之前的文章有介紹),有62256外部擴展的RAM,多達64K,顯然夠了,至於62256的原理我就不多說了,即是通過外部16位總線(P0口和P2口)的方式訪問,同時P0口是複用的,在先發送16位地址後又發送8位數據,由於62256的片選信號在P2^7,所以只要最高位爲0即可,即62256理論上的地址範圍爲0x0000-0xFFFF,但0x000開始的256+1024個字節是芯片自帶的ram爲了怕衝突所以我地址範圍定位0x2000-0xffff當然我們用不到這麼大的空間,可以根據實際情況設置使用的空間大小,那麼在哪裏設置呢,如圖


Off-chip Xdata memory 即片外的Xdata Ram區,start表示起始地址,size表示大小,這裏我使用的是從0x3000開始總共0x8f00個字節的空間(這個空間只要設的足夠大就行了).注意當我們設置這個地址後,片內的ram還是有效的,即在片內的ram不夠用的情況下纔會到0x3000這個地址開始去存放臨時數據。這樣我們就有了足夠的ram空間去存放臨時變量數據了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章