關(guān) 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設(shè)計應用 > 嵌入式系統(tǒng)快速重啟的研究

        嵌入式系統(tǒng)快速重啟的研究

        作者: 時間:2010-12-21 來源:網(wǎng)絡(luò) 收藏

        啟動流程

        ① 上電,復位完成;② 嵌入式ARM核自動把flash里面最低的4k啟動代碼復制到SRAM里面,并從SRAM的0x0000_0000地址開始執(zhí)行;③ 完成一些必要的初始化工作,將FLASH中的代碼拷貝到SDRAM中;④ 跳轉(zhuǎn)到SDRAM中運行;通過以上步驟,就進入了我們的應用程序,或者是操作系統(tǒng)。

        在我們需要復位的時候, 即nRESET管腳出現(xiàn)一個向下的脈沖,即出現(xiàn)復位。當nRESET信號為低電平時,ARM處理器放棄任何指令的執(zhí)行,并從增加的字地址處取指令;當 nRESET信號變?yōu)楦唠娖綍r,ARM處理器進行如下操作:1.將當前的PC值和CPSR值寫入R14_svc和SPSR_svc,已經(jīng)保存的PC和 SPSR的值是未知的;2.強制M[4:0]為10011(超級用戶模式),將CPSR中的“I”和“F”位設(shè)為1,并將T位清零;3.強制PC從0x00地址取下一條指令。4.恢復為ARM狀態(tài)開始執(zhí)行。即程序會跳到0x0000_0000這個地址位置,開始執(zhí)行上面所述的第三步和第四步。

        我們知道從flash里面讀取數(shù)據(jù)比起SDRAM是想當慢的,而這里又要進行一次代碼的拷貝工作,這也是一個相當長的時間。不過這個時候我們可以發(fā)現(xiàn),我們并沒有斷電,SDRAM里面放的數(shù)據(jù)還是我們代碼,我們沒有必要重新拷貝這些代碼了,在下次啟動的時候,只需直接跳轉(zhuǎn)到SDRAM中運行,做一些初始化工作就可以了。這樣重新啟動速度就相當迅速了。

        思想

        核心思想:在Bootloader里面,程序執(zhí)行到復制程序的一塊,可以判斷PC當前計數(shù)在哪個存儲器里面,如果在SRAM中,就把代碼復制到SDRAM里面,如果在SDRAM中,就直接跳過復制程序這一段,然后繼續(xù)執(zhí)行。

        根據(jù)上面這個思想, 可以先將地址為0x0000_0000這里的跳轉(zhuǎn)指令直接改成跳轉(zhuǎn)到SDRAM存儲器,如LDR PC,=0x3000_0000。

        這樣在Reset的時候,我們就可以直接從0x0000_0000地址跳到0x3000_0000開始運行。這樣我們就達到了快速啟動的目的。

        如圖2 所示, 在系統(tǒng)加電的時候,程序從地址為 0x0000_0000開始的SRAM處運行,如上圖1所示。


        然后,程序在SRAM中將代碼自身復制到地址為0x3000_0000開始處,如圖2中2所示。


        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 集贤县| 武穴市| 凯里市| 东安县| 温泉县| 抚州市| 梁平县| 丰台区| 阳泉市| 金溪县| 桃源县| 定兴县| 呼玛县| 平南县| 龙陵县| 湟中县| 天祝| 方山县| 苏尼特左旗| 江北区| 黔江区| 普陀区| 普安县| 博罗县| 新乡市| 天津市| 宁明县| 海城市| 连州市| 宜兴市| 北海市| 鸡东县| 内黄县| 赞皇县| 尚志市| 寿光市| 天镇县| 潮州市| 荆门市| 冕宁县| 兴海县|