什么是啟動代碼?
啟動代碼是系統上電或者復位后運行的第一段代碼,是進入C 語言的main 函數之前需要執行的那段匯編代碼。STM32的啟動代碼在startup_stm32f10x_hd.s
啟動代碼有何用?
它的作用是在用戶程序運行之前對系統硬件及軟件環境進行必要的初始化並在最后使程序跳轉到用戶程序。它直接面對ARM 處理器內核及硬件控制器進行編程,所執行的操作與具體的目標系統緊密相關。
C語言程序的運行需要具備一定的條件,如分配好外部數據空間、設置初始堆棧指針、配置時鍾、設置中斷向量入口、設置初始程序計數器(指向main())等。另外,匯編代碼可以更直接地對硬件進行操作,效率更高,這對啟動中斷等對時間要求更高的情況是非常必要的
什么是Bootloader?
Bootloader 不是一段代碼,它是一個具有引導裝載功能的完整的程序,如可以引導裝載linux的vivi,uboot,以及通常PC機上的BOIS程序等。
啟動代碼和Bootloader關系?
Bootloader 包含了相應的啟動代碼,也就是說,啟動代碼是Bootloader的一部分,是所有相應應用程序的一部分。
bootloader的一個很重要的能力是能實現程序跳轉,即從一個完整的程序跳轉到另一個完整的程序進行運行;在嵌入式系統中,bootloader一個很重要的功能是更新程序,要求bootloader不僅能接收數據,還能把數據寫入flash中
在STM32中,ST官方在單片機內部嵌入了一個bootloader,所以可以使用UART進行下載;如果ST官方的bootloader有哪一點我們不滿意,也可以自己編寫bootloader,當然也可以實現幾乎和官方bootloader一樣的功能,一般我們編寫自己的bootloader用於在單片機不斷電的情況下通過網絡等方式遠程更新單片機的程序(不是自己編寫的bootloader),自己編寫的bootloader也稱為
IAP。
不同於bootloader的接收數據,數據寫入FLASH(無法直接寫入flash,因為數據的接收是用UART等方式)從而實現更新程序,ST-LINK仿真器更新程序的方式是直接操作flash,類似於操作EEPROM等存儲器,ST-LINK從下載程序角度來看也是bootloader,