資源描述:
《scatter文件的寫法》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、scatter文件的寫法 程序總有兩種狀態(tài):運(yùn)行態(tài)和靜止態(tài)。當(dāng)系統(tǒng)掉電的時候程序需要被保存在非易失性的存儲器中,且這個時候程序的排放是按照地址依次放的,換句話說:我才懶得管它怎么放,只要不掉就行。當(dāng)系統(tǒng)上電后,CPU就要跑起來了,CPU屬于高速器件,存儲器總是不怎么能跟得上,既然跟不上那么我們就盡量縮短它們之間的差距,那留下一條路,那就是盡量提高存儲器的讀取速度,存儲器類型決定其速度的水平,那么盡量放在速度高的存儲器就成為首選解決方案。那么我們就把要執(zhí)行的程序暫時拿到速度較快的RAM中。那么拿的過程就牽涉到程序的加載了。這就是要解決的問題?! ∫粋€映像文件由域(region
2、)、輸出段(outputsections)和輸入段(inputsections)組成。不要想得太復(fù)雜,其實(shí)他們之間就是包含與被包好的關(guān)系。具體關(guān)系是這樣的: 映像文件>??域>?輸出段>?輸入段 輸入段: 輸入段就是我們寫的代碼+初始化的數(shù)據(jù)+應(yīng)該被初始化為0的數(shù)據(jù)+沒有初始化的數(shù)據(jù),用英文表示一下就是:RO(ReadOnly),RW(ReadWrite),ZI(ZeroInitialized),NOINIT(NotInitialized)。ARM連接器根據(jù)各個輸入段不同的屬性把相同的拿再一起組合一下就成為了輸出段?! ≌埧纯雌綍r寫的東東: AREA???RESET,
3、CODE,READONLY AREA???DSEG1,DATA,READWRITE AREA???HEAP,NOINIT,READWRITE 看出其屬性沒? 輸出段: 為了簡化編譯過程和更容易取得各種段的地址,那么把多個同屬性的輸入段按照一定的規(guī)律組合在一起,當(dāng)然這個輸出段的屬性就和它包含的輸入段的屬性一樣咯。輸入段的排放規(guī)律就是:最先排放RO屬性的輸入段,然后是RW屬性段,最后是ZI或NOINIT段。 域:??????? 為什么還要加一層域,我的理解是由于代碼的功能不同,那么我們有必要把不同功能的代碼分類放。我們可以把需要高速執(zhí)行的代碼放在一起、把對速度要求不
4、高的放在一起、把執(zhí)行頻率高的放在一起,把執(zhí)行頻率低的放在一起...那么按照這種方式放的代碼就可以根據(jù)其具體需要放在不同的存儲器中了。這樣可以提高程序執(zhí)行速度。一個域中包含1~3個輸出段。 映像文件: 我暫時把映像文件理解成燒到存儲器中的文件,由N個域組成。這些域其實(shí)可以看做是獨(dú)立的模塊,只是他們按照一定的順序(這個順序還是:RO+RW+ZI)被捆綁在一起,這樣才方便燒寫到非易失存儲器中去。 好了,了解了映像文件的組成,那么來看看映像文件是怎么跑起來的?! ∮诚裎募褪怯蠳節(jié)車廂的火車,車廂(域)里裝著要送到不同站(不同類型的存儲器)的貨物。到相應(yīng)的站了,那么就把相應(yīng)的車
5、廂拿下來。指揮拿這個的就是scatter文件。拿下貨物車廂后,我們就解開它,把里面的品牌為RO的貨物提取出來,按照scatter的指示發(fā)給某個地址,然后再先后把品牌為RW和ZI的貨物發(fā)到scatter指定的地址?! 】纯催@個加深理解: LOAD_ROM1????0X00000000???;從火車上取出來時的地址(如:成都站) { ???????????EXEC_ROM1??????0x40000000???? ???????????{ ??????????????????PROGRAM.O(+RO)?;把品牌RO的貨物發(fā)給0x40000000去 ?????????
6、??????????RAM1?????????0x80000000 ???????????????????{ ???????????????????PROGRAM.O(+RW,+ZI);把品牌RW,ZI的貨物依次發(fā)給0x80000000 ????????????????????}??????????????????? ????????????} ????????????...... } 其他的段也可以這樣依葫蘆畫瓢。scatter的原理就介紹這樣,其中的語法和規(guī)則要多寫多把代碼的地址拖出來看才能體會。不過都是很簡單的,生活中的小常識就能解決這些問題。為什么?因?yàn)?/p>
7、設(shè)計(jì)這些規(guī)則的工程師的靈感就是源自生活。嘿嘿...享受把代碼隨處放的樂趣吧,...enjoy...?scatterloading實(shí)際的嵌入式系統(tǒng)中,ADS提供的缺省存儲器映射是不能滿足要求的。用戶的目標(biāo)硬件通常有多個存儲器設(shè)備位于不同的位置,并且這些存儲器設(shè)備在程序裝載和運(yùn)行時可能還有不同的配置。?????Scatterloading可以通過一個文本文件來指定一段代碼或數(shù)據(jù)在加載和運(yùn)行時在存儲器中的不同位置。這個文本文件scatterfile在命令行中由-scatter開關(guān)指定,例如:?????arml