1. 程式人生 > >為什麼ARM的啟動程式碼是彙編?

為什麼ARM的啟動程式碼是彙編?

啟動程式碼
為什麼啟動程式碼一定一要用匯編語言編寫,啟動程式碼的主要功能是什麼?微控制器不用啟動程式碼,為什麼arm要用啟動程式碼?

------解決方案--------------------------------------------------------
最開始的幾行程式碼要完成初始化中斷向量,堆疊什麼的。這些只能用匯編做。
------解決方案--------------------------------------------------------
CPU上電後會從IO空間的某地址取第一條指令。但此時:PLL沒有啟動,CPU工作頻率為外部輸入晶振頻率,非常低;CPU工作模式、中斷設定等不確定;儲存空間的各個BANK(包括記憶體)都沒有驅動,記憶體不能使用。在這種情況下必須在第一條指令處做一些初始化工作,這段初始化程式與作業系統獨立分開,稱之為bootloader。
一個嵌入式Bootloader最初始部分的程式碼幾乎必須是用匯編語言寫成的,因為開發板剛上電後沒有準備好C程式執行環境,比如堆疊指標SP沒有指到正確的位置。彙編程式碼應該完成最原始的硬體裝置初始化,並準備好C執行環境,這樣後面的功能就可以用C語言來寫了。
------解決方案--------------------------------------------------------
1. C language 沒有 SP(Stack Pointer register), CPSR, CP15 等的控制指令, 若要初始化這些, 一定要用 Assembly code, 其它部份不是不能用 C language 實現, 但誠如 3L 所述, C language 的執行環境尚未準備好, 故 SP 必須先設好, Global Variable, standard library 都還不能使用.
2. 微控制器沒有 OS 的觀念, 可以說全部都是在啟動程式碼的模式.

Paul, Chao @ Techware

------解決方案--------------------------------------------------------
微控制器不用啟動程式碼,為什麼arm要用啟動程式碼?

上面大家都說了為什麼ARM要用啟動程式碼。

其實微控制器也是有“啟動程式碼”的。只不過這部分工作不需要微控制器程式設計師自己來完成。

比如用Keil C編寫微控制器程式,針對指定型號的微控制器啟動程式碼由Keil來完成了。不需要我們干涉。

微控制器程式只需要直接編寫c部分的程式即可。