1. gzyueqian
      18529173453

      嵌入式開發(fā):MCU啟動代碼的隱藏世界

      更新時間: 2022-08-26 10:28:31來源: 粵嵌教育瀏覽量:8621

        嵌入式開發(fā)人員觀看固件在微控制器調(diào)試器上運(yùn)行幾乎是一種神奇的體驗(yàn)。按下 IDE 中的那個綠色小按鈕,進(jìn)度條在顯示屏上快速完成,直到最后屏幕閃爍,一行代碼用 main 一詞突出顯示。幕后發(fā)生了如此多的事情,幾乎令人難以置信!讓我們檢查在到達(dá)程序 main 之前發(fā)生了什么。

        一旦程序被加載到微控制器上,微處理器首先讀取復(fù)位向量開始執(zhí)行。復(fù)位向量保存程序的第一條指令所在的內(nèi)存地址。然而,這些第一條指令并不是 main 中存在的應(yīng)用程序的開始,而是通常隱藏在啟動代碼中的初始化例程。

        啟動代碼執(zhí)行許多關(guān)鍵功能,這些功能是準(zhǔn)備微控制器以開始執(zhí)行開發(fā)人員的應(yīng)用程序所必需的。啟動代碼所遵循的確切步驟因微控制器而異,但通常第一步是初始化系統(tǒng)時鐘。系統(tǒng)時鐘穩(wěn)定后,必須通過將初始化變量復(fù)制到 RAM 來設(shè)置內(nèi)存環(huán)境。此過程通常稱為“C 向下復(fù)制”。這個想法是微控制器的內(nèi)存被設(shè)置為運(yùn)行應(yīng)用程序代碼將在其下運(yùn)行的 C 環(huán)境。

        啟動代碼還將初始化堆棧指針。堆棧是存儲自動變量、函數(shù)參數(shù)、中斷幀和函數(shù)返回地址的內(nèi)存區(qū)域。裸機(jī)系統(tǒng)(沒有 RTOS 的系統(tǒng))將只有一個堆棧區(qū)域,默認(rèn)情況下,該區(qū)域的大小通常為 0x400 深度。嵌入式開發(fā)人員啟動代碼通常會有一些旨在設(shè)置堆棧指針頂部的匯編語言指令。

        一旦時鐘被初始化,C 向下復(fù)制并且棧頂已經(jīng)被識別,最后一步是跳轉(zhuǎn)到或調(diào)用 main 。一些啟動代碼將執(zhí)行跳轉(zhuǎn)到 main 而不是對 main 的函數(shù)調(diào)用,因?yàn)檫@可以節(jié)省一些寶貴的堆棧空間字節(jié)。但是,無論使用哪種方法,開發(fā)人員都會發(fā)現(xiàn)自己處于 main 的開頭,調(diào)試器暫停并等待執(zhí)行應(yīng)用程序的權(quán)限。

        


        然而,開發(fā)人員通常完全不知道在到達(dá) main 開頭之前已執(zhí)行的所有代碼。但是,如果開發(fā)人員取消選中“run to main”選項(xiàng),應(yīng)用程序不會在 main 的第一行中斷,而是在啟動代碼的第一條指令處中斷。然后,開發(fā)人員可以在到達(dá) main 之前單步執(zhí)行用于設(shè)置處理器的每一行代碼。正如人們所預(yù)料的那樣,啟動代碼通常因開發(fā)環(huán)境而異。在項(xiàng)目開始時,單步執(zhí)行啟動代碼通常很有用,因?yàn)樵诘竭_(dá) main 之前,嵌入式開發(fā)人員永遠(yuǎn)不知道會設(shè)置什么有趣的東西。

        如果混合中有引導(dǎo)加載程序,微控制器的啟動代碼會變得更加復(fù)雜。當(dāng)應(yīng)用程序啟動時,可能會有一段代碼執(zhí)行快速檢查以確定是否應(yīng)執(zhí)行主應(yīng)用程序或是否應(yīng)執(zhí)行固件更新應(yīng)用程序。如果執(zhí)行引導(dǎo)加載程序以更新固件或簡單地以已知狀態(tài)啟動系統(tǒng)并執(zhí)行系統(tǒng)完整性檢查,則啟動代碼可能需要重置堆棧指針,而不是簡單地對其進(jìn)行初始化。

        嵌入式軟件開發(fā)人員過去了解他們軟件的每一個角落。由于微控制器已經(jīng)采用 32 位,因此開發(fā)固件的方式發(fā)生了迅速變化。處理器如何啟動和代碼執(zhí)行的細(xì)節(jié)只是開始隱藏在幕后的第一段代碼。有一天,嵌入式開發(fā)人員可能只知道微控制器級別發(fā)生的事情,就像應(yīng)用程序開發(fā)人員了解服務(wù)器微處理器級別發(fā)生的事情一樣多。盡管似乎失去了洞察力,但抽象和隱藏代碼的級別無疑將幫助開發(fā)人員更快地以更低的成本編寫代碼,而明顯的魔術(shù)在幕后起作用。

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日本三级香港三级人妇99负 | 亚洲伊人久久精品福利 | 激情久久一区二区三区 | 日本私人免费网站在线观看 | 亚洲成a人片在线高速观看 最新国产精品拍自在线播放 | 亚洲开心婷婷中文字幕 |