新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 程序在RAM中調(diào)試的運(yùn)行方式&程序固化后運(yùn)行方式

        程序在RAM中調(diào)試的運(yùn)行方式&程序固化后運(yùn)行方式

        作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏
        程序固化運(yùn)行方式

        程序開(kāi)始運(yùn)行后需要將RW 和ZI段搬移到RAM中去,程序下載進(jìn)Flash中以后,上電后是怎樣將RW ZI斷搬移到RAM中去的?注意IAR和ADS在進(jìn)行完.s文件的初始化以后都不是直接跳轉(zhuǎn)到main函數(shù)去執(zhí)行,IAR是跳轉(zhuǎn)到?main中而ADS是跳轉(zhuǎn)到__main函數(shù)中,在這些函數(shù)中根據(jù)icf文件的配置,將RW和ZI段搬移到icf文件規(guī)定的RAM區(qū)域中。如果程序的運(yùn)行時(shí)域是在片外RAM中,那程序是在什么時(shí)候?qū)ζ釸AM控制器進(jìn)行初始化呢?因?yàn)?s文件的開(kāi)始部分是CODE RO的,不需要RAM空間,所以可以在.s文件中對(duì)片外RAM進(jìn)行配置。還有一個(gè)問(wèn)題,這個(gè)問(wèn)題是在硬件設(shè)計(jì)時(shí)必須注意的,如果需要程序固化在外部Flash中,必須注意外接的Flash必須是片子上電后默認(rèn)片外總線就支持的片子。

        本文引用地址:http://www.104case.com/article/201611/321235.htm

        程序在RAM中調(diào)試的運(yùn)行方式

        為了調(diào)試的方便,程序有時(shí)候是不需要下載進(jìn)flash進(jìn)行調(diào)試,而是直接在RAM中運(yùn)行,將icf文件中的ROM 和RAM地址都設(shè)成硬件RAM的地址,將Flashloader的使能關(guān)掉,那么程序就運(yùn)行在RAM中了。但是問(wèn)題又產(chǎn)生了,因?yàn)橛袝r(shí)我們想在外部RAM中調(diào)試代碼,所以片外RAM控制器需要在代碼下載進(jìn)RAM之前進(jìn)行初始化,怎么能夠?qū)崿F(xiàn)呢?IAR是通過(guò).mac文件實(shí)現(xiàn)的。在程序下載之前先執(zhí)行了。mac文件中的程序,下面是一個(gè)例子

        execUserFlashInit()
        {
        __writeMemory32(0x1000ffef, 0xffe00000 , "Memory");
        __writeMemory32(0x0f000114, 0xE002C014, "Memory");
        }

        該例子是lpc初始化外部RAM的例子。配置好了外部RAM就可以在里面跑代碼了。

        程序的IAR下載

        1. 文件在片內(nèi)Flash中下載運(yùn)行

        這是最簡(jiǎn)單也是最常用的方式,一般的ARM芯片都會(huì)帶有片內(nèi)Flash,IAR會(huì)通過(guò)Flashloader將二進(jìn)制的可執(zhí)行文件下載到Flash中。下載的方式如下:如果要將程序B下載到片子里,IAR先將一個(gè)程序A(IAR事先編好的程序)下載到片內(nèi)的RAM中,然后利用這個(gè)程序A通過(guò)JTAG和Flashloader交互完成程序B的下載。

        2. 文件在片外Flash中下載

        IAR下載進(jìn)RAM中的程序A必須支持片外的Flash,他能夠完成片外Flash的擦除。往往這個(gè)程序需要自己寫。像HJTAG的下載機(jī)制也是這樣,HJTAG中列舉了很多HJTAG支持的芯片,所謂支持就是HJTAG很有這些芯片的A程序。在HJTAG中必須要指定程序A將要下載到的RAM的地址,而且這個(gè)地址的RAM必須是可用的,比如如果用的片外SDRAM的話就必須初始化SDRAM控制器。這在HJTAG的Init Script中完成、在IAR的mac文件中完成。

        3. 文件在片內(nèi)RAM中下載 、文件在片外RAM中下載

        由于這兩種方式不需要Flashloader的參與,這時(shí)程序的加載時(shí)域和運(yùn)行時(shí)域是相同的,程序運(yùn)行后不涉及程序的搬移,所以只要給IAR指定運(yùn)行時(shí)域的RAM地址就行了,如果是內(nèi)部RAM,那非常省事,直接在icf文件中將地址都設(shè)置成內(nèi)部RAM就行,如果是外部RAM那么在mac文件中初始化外部SDRAM控制器或者其他的RAM,然后IAR就可以完成將程序放在已經(jīng)初始化好的外部RAM里,并運(yùn)行。



        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 石河子市| 莒南县| 永州市| 盐池县| 昭苏县| 砚山县| 美姑县| 麻江县| 无锡市| 麻城市| 东丰县| 江西省| 八宿县| 永康市| 永春县| 临夏县| 台中市| 廊坊市| 东城区| 玛多县| 张掖市| 石渠县| 登封市| 兴国县| 诸暨市| 阳原县| 尼木县| 临泉县| 武威市| 日照市| 山阴县| 垫江县| 无锡市| 苍梧县| 荥阳市| 灵宝市| 南川市| 台江县| 仁怀市| 峨边| 河间市|