TCC89x的內(nèi)存分布區(qū)域設(shè)置
//=====================================================================
//TITLE:
// TCC89x的內(nèi)存分布區(qū)域設(shè)置
//AUTHOR:
// norains
//DATE:
// Friday 7-January-2011
//Environment:
// Visual Studio 2005
// TCC89x Magellan V1.9.1
//=====================================================================
對(duì)于TCC89x而言,如何正確設(shè)置內(nèi)存分布區(qū)域是一件很重要的事情。當(dāng)然,如果你開(kāi)發(fā)的產(chǎn)品和官方的EVB一致,也不會(huì)超過(guò)官方的范圍,那么你一切皆可安心,直接采用默認(rèn)設(shè)置即可。但如果不是,那么你就必須要自己手動(dòng)更改了。
TCC89x的內(nèi)存設(shè)置在magellan.bib文件,而該文件在BSP包Magellan的Files文件夾之下。在討論這個(gè)問(wèn)題之前,我們先看看內(nèi)存分配的大概領(lǐng)域,如圖:
方框指的是每個(gè)范圍領(lǐng)域的內(nèi)容,如果方框?yàn)榛疑?,意味著這兩個(gè)領(lǐng)域只有在XIP模式下才有效。而紅色的字體,對(duì)應(yīng)magellan.bib文件中相應(yīng)的宏,表示需要需要設(shè)置的數(shù)值。從圖中可以看出,需要設(shè)置的數(shù)值分為兩個(gè),一個(gè)是起始地址,另一個(gè)則是大小。
Telechips原廠的magellan.bib文件末尾給出了一種計(jì)算這些數(shù)值的方法,只不過(guò)這方法是針對(duì)從零開(kāi)始的狀況,對(duì)于我們只需要修改某些數(shù)值的使用者而言,無(wú)疑顯得稍有繁瑣。其實(shí)回過(guò)頭來(lái)說(shuō),一般magellan.bib文件我們并不需要大的修改,最常見(jiàn)的是由于添加的組件太多,導(dǎo)致編譯的NK比規(guī)定的范圍要大,這時(shí)候才需要對(duì)magellan.bib文件進(jìn)行修正。
結(jié)合我們的所給的例圖,修改NK的大小很簡(jiǎn)單。NKSTART數(shù)值維持不動(dòng),我們只是將NKLEN擴(kuò)大。而NKLEN增大以后,就會(huì)影響到RAMSTART和RAMLEN的取值,而這兩個(gè)數(shù)值在原有的基礎(chǔ)上修改也是很簡(jiǎn)單的事情。
對(duì)于新的RAMSTART,其計(jì)算方法如下:
RAMSTART(new) = NKSTART + NKLEN(new)
新的RAMLEN,計(jì)算方式也大同小異,如下:
RAMLEN(new) = DDRAWST - RAMSTART(new)
這里需要注意一個(gè)問(wèn)題,就是NKLEN超過(guò)33M的話,雖然可以編譯成功,但用FWDN燒錄系統(tǒng)的時(shí)候,會(huì)出錯(cuò),其信息如圖:
從圖中的信息告訴我們,Kernel空間不夠,無(wú)法燒錄NK.ROM!那是不是意味著我們的NK只能少于33M呢?當(dāng)然不是。不過(guò),為了支持超過(guò)33M的大小,我們必須修改相應(yīng)的代碼。
打開(kāi)./Magellan/Src/LIB/SOC/NAND_DRV/nand_drv_v7.c文件,找到NAND_HIDDEN_0_PAGESIZE宏,其源代碼如下:
[cpp] view plaincopy#define NAND_HIDDEN_0_PAGESIZE (33/*MB*/*1024*2)
#define NAND_HIDDEN_1_PAGESIZE (3/*MB*/*1024*2) // for LOGO
#define NAND_HIDDEN_2_PAGESIZE (2/*MB*/*1024*2)
#define NAND_HIDDEN_3_PAGESIZE (3/*MB*/*1024*2)
聰明的讀者可能已經(jīng)想到,如果需要NK支持更大的容量,只需要更改NAND_HIDDEN_0_PAGESIZE宏即可。原來(lái)的大小是33,你可以選擇36,甚至更多,只要能容得下你NK的大小即可。