運(yùn)維兼職平臺重慶seo網(wǎng)站運(yùn)營
BootLoader的定義:
? ? ? ? CPU進(jìn)入APP之前運(yùn)行的一小段程序代碼就叫做BootLoader。它是由程序員編寫的,作用是更新應(yīng)用程序。這也就說明了只有BootLoader的單片機(jī)才可以升級。有的產(chǎn)品有升級的需要就需要BootLoader了。
單片機(jī)的啟動過程可以這么敘述:start→stack→data→Vactor→main;
單片機(jī)一上電,PC指針指向0x00000000地址所在的一塊內(nèi)存,加載一個需要跳轉(zhuǎn)的地址,這個地址可以是應(yīng)用程序的地址,也可以是BootLoader的地址,是哪個地址根據(jù)開發(fā)階段的不同有所不同。
一般來說一個完整的操作流程是,從初始地址開始跳轉(zhuǎn)到boot里去檢測需不需要升級,需要的話就會停在boot里,不需要的話就跳轉(zhuǎn)到應(yīng)用程序里。
看一下下圖,右邊兩個hex文件分別是燒錄到左圖中的兩個區(qū)域的,也就是單片機(jī)里,實(shí)際工程項(xiàng)目中這兩個hex文件是在一起的,這里為了區(qū)分劃分成了兩個hex文件。
說明一下應(yīng)用程序的首地址是這個應(yīng)用程序的一個啟動函數(shù),啟動函數(shù)是一個工程啟動文件,相信學(xué)32單片機(jī)的時候都接觸過有一個叫做啟動文件的東西,有堆棧的建立,靜態(tài)數(shù)據(jù)的存儲,向量表的建立,這些基礎(chǔ)工作做完,才會跳轉(zhuǎn)到這個main函數(shù),執(zhí)行的才是用戶自己的代碼。
?補(bǔ)充:如果需要升級的話,上面說到會停在boot里,然后根據(jù)診斷儀的引導(dǎo),完成app黃色區(qū)域的擦除和寫入,當(dāng)app程序下載完成后,軟件自動復(fù)位,此時程序就更新完成了,不再有升級需求,boot就會直接跳轉(zhuǎn)到應(yīng)用程序。