爲什麼啓動代碼必須用彙編

啓動代碼
爲什麼啓動代碼一定一要用匯編語言編寫,啓動代碼的主要功能是什麼?單片機不用啓動代碼,爲什麼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部分的程序即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章