新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機的快速啟動技術

        單片機的快速啟動技術

        作者: 時間:2013-02-20 來源:網絡 收藏
          系統硬件初始化

          系統上電或復位后,程序從位于地址0x0的Reset Exception Vector處開始執行,因此需要在這里放置Bootloader的第一條指令:b ResetHandler,跳轉到標號為ResetHandler處進行第一階段的硬件初始化,主要內容為:關看門狗定時器,關中斷,初始化PLL和時鐘,初始化存儲器系統。執行完以上程序后,系統進行堆棧和存儲器的初始化。系統堆棧初始化取決于用戶使用了哪些中斷,以及系統需要處理哪些錯誤類型。一般情況下,管理者堆棧必須設置,如果使用了IRQ中斷,則IRQ堆棧也必須設置。如果系統使用了外設,則需要設置相關的寄存器,以確定其刷新頻率、總線寬度等信息。

          代碼段復制到RAM中運行

          因為嵌入式系統的代碼通常都是固化在ROM或者Flash中,上電后開始運行。由于ROM和Flash的讀取速度相對較慢,這樣無疑會降低代碼的執行速度和系統的運行效率。為此,需要把系統的代碼復制到RAM中運行。使用SDT鏈接器ARMLink產生的定位信息,把RO的有效代碼和數據段到RAM中。 ARMLink將編譯后的程序鏈接成ELF文件。映像文件內部共有三種輸出段:RO段、RW段和ZI段。這三種輸出段分別包含了只讀代碼及包含在代碼段中的少量數據、可讀寫的數據、初始化為0的數據,ARMLink同時還產生了這三種輸出段的起始和終止定位信息:Image$$RO$$Base、 Image$$RO$$Limit、Image$$RW$$Base、Image$$Limit、Image$$Linit和Image$$ZI$$ Limit??梢栽诔绦蛑惺褂眠@些定位信息。將ROM中的代碼和數據搬移到RAM中,具體程序如下。

          LDR r0, =|Image$$RO$$Base| /*RO段起始地址*/

          LDR r1, =|Image$$RO$$Limit| /*RO段結束地址*/

          LDR r2, =|Image$$RW$$Base|

          LDR r3, =|Image$$RW$$Limit|

          /*分別求出需要映像的代碼和數據的長度并累加,放到寄存器R1中*/

          SUB r1, r1, r0

          SUB r3, r3, r2

          ADD r1, r1, r3

          /*將需要映象的代碼和數據復制到RAM中去*/

          0 /*標示符*/

          LDR r3, [r0], #4

          STR r3, [r2], #4

          SUBS r1, r1, #4

          BNE %B0 /*如果沒有復制完,跳轉到0標示符處的匯編語句,繼續復制,參見ARM指令幫助手冊*/

          建立二級中斷向量表

          在ARM 系統中,中斷向量表位于0X0開始的地址處,意味著無論運行什么樣的上層軟件,一旦發生中斷,程序就得到Flash存儲器中的中斷向量表里去,降低系統的運行效率。因此在RAM中建立自己的二級中斷向量表,當中斷發生后,程序直接從RAM中取中斷向量進入中斷子程序。尤其是在發生的系統里,這種方法可以大大提高系統的運行效率,具體的實現代碼如下。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 天长市| 澄城县| 衡山县| 松桃| 孝感市| 长武县| 临安市| 十堰市| 保山市| 金乡县| 伊通| 富川| 永清县| 灵宝市| 蓝田县| 万山特区| 西吉县| 宿迁市| 内黄县| 秦安县| 来安县| 建宁县| 玉山县| 调兵山市| 黄骅市| 绍兴县| 涿州市| 贡嘎县| 武鸣县| 怀集县| 虎林市| 临城县| 淄博市| 天祝| 安化县| 独山县| 青龙| 伊川县| 浦北县| 革吉县| 民权县|