微控制器的啟動過程

2021-10-01 19:07:00 字數 1488 閱讀 8046

參考部落格:微控制器記憶體(ram)、flash、與資料儲存和啟動過程說明

強推這篇部落格:

啟動**通常都燒寫在flash中,它是系統一上電就執行的一段程式,它執行在任何使用者c**之前。上電後,arm處理器處於arm態,執行於管理模式,同時系統所有中斷被禁止,pc到位址0處取指令執行。乙個可執行映像檔案必須有個入口點,而能放在rom起始處的映像檔案的入口位址也必須設定為0.在組合語言中,我們已經說過怎樣定義乙個程式的入口點,當工程中有多個入口點時,需要在聯結器中使用-entry指出程式的入口點。如果使用者建立的程式中,包含了main函式,則與c庫初始化**對應的也會有個入口點。

總的來說,啟動**主要完成兩方面的工作,一是初始化執行環境,例如中斷向量表、堆疊、i/o等;二是初始化c庫和使用者應用程式。在第一階段,啟動**的人物可以描述為:

(1)建立中斷向量表;

(2)初始化儲存器;

(3)初始化堆疊暫存器;

(4)初始化i/o以及其他必要的裝置;

(5)根據需要改變處理器的狀態。

–>建立中斷向量表

初始化**必須建立好中斷向量表,以備應用程式後續使用。如果系統的位址0處是rom,則中斷向量表直接是一些跳轉指令就可以了,他們轉到相應的中斷處理函式執行。如果系統的0位址處不是rom,則中斷向量表是通過動態的方式建立的,這主要是通過儲存器對映的方式來實現:即上電後,rom中的位址被對映到位址0,它首先開始執行以便完成環境的初始化,最重要的它會將中斷向量表拷貝到ram中,然後通過位址對映將ram位址對映為0,這樣ram中的中斷向量就可以使用了。

–>初始化儲存系統

對於有mmu的處理器,需要正確初始化mmu,沒有的只需正確初始化儲存控制器,為每個bank配置正確的引數就可以了。

–>初始化堆疊指標

初始化**必須初始化處理器各個模式下的堆疊指標,所有系統或使用者程式會涉及的處理器模式對應的堆疊指標都應該初始化。通常未定義指令和預取指終止異常對應模式的堆疊指標不需要配置,除非使用者需要使用它們作為除錯使用。

–>初始化堆疊指標

初始化**必須初始化處理器各種模式下的堆疊指標,所有系統或使用者程式會涉及的處理器模式對應的堆疊指標都應該被初始化。通常未定義指令和預取指終止異常對應模式的堆疊指標不需要配置,除非使用者需要使用它們作為除錯使用。

–>初始化i/o以及其他必要裝置

關鍵的輸入輸出模組必須在中斷開啟之前被配置,例如看門狗,否則它們會在系統啟動後產生復位訊號。

–>改變處理器狀態和模式

啟動**執行時,處理器狀態認為管理模式,如果使用者程式需要執行在使用者模式,可以切換轉入使用者模式;所有處理器上電後是處於arm狀態的,如果需要改變處理器狀態,也可以在啟動**裡切換到thumb態。

在執行環境建立起來後,接下來就是應用程式的初始化,簡單點就是講使用者程式載入到他們相應的執行位址,初始化資料區等,這個階段完成後,才能進入使用者最終的c**區域。使用者應用程式的初始化過程包括:將rw段的資料拷貝到他們的執行位址處,同時在rw段後面初始化相應大小的zi段資料,把他們初始化為0,使用了庫函式的程式(工程中有main函式)是在庫函式_main中自動完成這些工作的。

微控制器的啟動過程(從上電到main)

理解這篇文章之前,我們需要配合了解兩個基礎知識。乙個是載入檢視和執行試圖,乙個是微控制器的儲存空間。這篇文章會涉及兩個新內容,而載入檢視又涉及啟動 和scatter檔案。所以通過整合環境講解啟動 總顯得力不從心。這裡我們從編譯器和鏈結器開始講起。1 c語言的編譯都是按照檔案進行編譯的,編譯完成後,每...

微控制器的冷 熱啟動

微控制器的復位常稱為冷啟動或是熱啟動,根據啟動要因的不同區分。冷啟動 掉電後的啟動 熱啟動 微控制器復位等 如何去判斷?微控制器掉電以後,在重新啟動後,ram中的資料應該都會被初始化為特定狀態。如何判斷當前的啟動時冷 熱啟動,從而對系統進行初始化設定。冷啟動一般會初始化所有的ram值。熱啟動會初始化...

微控制器 printf 移植過程

在網上看到有人在微控制器上使用printf函式,心癢癢,也想用,看了網上的一些方法,大都是51微控制器的,說的是在51微控制器編譯軟體庫中有自帶printf函式,也有自己實現 乙個自己的printf函式的,但是講的不詳細,看了好幾個部落格,東拼西湊,也在自己的 微控制器上弄出來了。1,先進行用到的知...