程序在RAM中調(diào)試的運行方式&程序固化后運行方式
程序開始運行后需要將RW 和ZI段搬移到RAM中去,程序下載進Flash中以后,上電后是怎樣將RW ZI斷搬移到RAM中去的?注意IAR和ADS在進行完.s文件的初始化以后都不是直接跳轉(zhuǎn)到main函數(shù)去執(zhí)行,IAR是跳轉(zhuǎn)到?main中而ADS是跳轉(zhuǎn)到__main函數(shù)中,在這些函數(shù)中根據(jù)icf文件的配置,將RW和ZI段搬移到icf文件規(guī)定的RAM區(qū)域中。如果程序的運行時域是在片外RAM中,那程序是在什么時候?qū)ζ釸AM控制器進行初始化呢?因為.s文件的開始部分是CODE RO的,不需要RAM空間,所以可以在.s文件中對片外RAM進行配置。還有一個問題,這個問題是在硬件設(shè)計時必須注意的,如果需要程序固化在外部Flash中,必須注意外接的Flash必須是片子上電后默認片外總線就支持的片子。
本文引用地址:http://m.butianyuan.cn/article/201611/321235.htm程序在RAM中調(diào)試的運行方式
為了調(diào)試的方便,程序有時候是不需要下載進flash進行調(diào)試,而是直接在RAM中運行,將icf文件中的ROM 和RAM地址都設(shè)成硬件RAM的地址,將Flashloader的使能關(guān)掉,那么程序就運行在RAM中了。但是問題又產(chǎn)生了,因為有時我們想在外部RAM中調(diào)試代碼,所以片外RAM控制器需要在代碼下載進RAM之前進行初始化,怎么能夠?qū)崿F(xiàn)呢?IAR是通過.mac文件實現(xiàn)的。在程序下載之前先執(zhí)行了。mac文件中的程序,下面是一個例子
execUserFlashInit()
{
}
該例子是lpc初始化外部RAM的例子。配置好了外部RAM就可以在里面跑代碼了。
程序的IAR下載
1.
這是最簡單也是最常用的方式,一般的ARM芯片都會帶有片內(nèi)Flash,IAR會通過Flashloader將二進制的可執(zhí)行文件下載到Flash中。下載的方式如下:如果要將程序B下載到片子里,IAR先將一個程序A(IAR事先編好的程序)下載到片內(nèi)的RAM中,然后利用這個程序A通過JTAG和Flashloader交互完成程序B的下載。
2.
IAR下載進RAM中的程序A必須支持片外的Flash,他能夠完成片外Flash的擦除。往往這個程序需要自己寫。像HJTAG的下載機制也是這樣,HJTAG中列舉了很多HJTAG支持的芯片,所謂支持就是HJTAG很有這些芯片的A程序。在HJTAG中必須要指定程序A將要下載到的RAM的地址,而且這個地址的RAM必須是可用的,比如如果用的片外SDRAM的話就必須初始化SDRAM控制器。這在HJTAG的Init Script中完成、在IAR的mac文件中完成。
3.
由于這兩種方式不需要Flashloader的參與,這時程序的加載時域和運行時域是相同的,程序運行后不涉及程序的搬移,所以只要給IAR指定運行時域的RAM地址就行了,如果是內(nèi)部RAM,那非常省事,直接在icf文件中將地址都設(shè)置成內(nèi)部RAM就行,如果是外部RAM那么在mac文件中初始化外部SDRAM控制器或者其他的RAM,然后IAR就可以完成將程序放在已經(jīng)初始化好的外部RAM里,并運行。
評論