1. gzyueqian
      13352868059

      嵌入式開發(fā):嵌入式基礎(chǔ)–了解微控制器引導(dǎo)過程

      更新時(shí)間: 2022-08-07 09:30:11來源: 粵嵌教育瀏覽量:9648

        嵌入式軟件開發(fā)中最容易被忽視的過程之一是微控制器引導(dǎo)過程。原因是硅工具鏈已經(jīng)變得非常善于提供和抽象引導(dǎo)過程,因此嵌入式開發(fā)人員通常不會考慮它。不幸的是,這可能導(dǎo)致對微控制器如何啟動(dòng)、如何初始化以及最終如何找到自己熟悉的主要功能缺乏了解。本文將探討引導(dǎo)過程,并闡明幕后發(fā)生了什么。

        微控制器啟動(dòng)過程從簡單地給系統(tǒng)通電開始。一旦電壓軌穩(wěn)定下來,微控制器就會在復(fù)位向量中查找flash中可以找到啟動(dòng)指令的位置。復(fù)位向量是閃存映射中的一個(gè)特殊位置。

        微控制器加載存儲在復(fù)位向量中的地址,然后CPU加載并執(zhí)行其中包含的指令。這些最初的指令并不是開發(fā)人員創(chuàng)建的main的開始。相反,這些是關(guān)于如何啟動(dòng)微控制器的說明。

        通常發(fā)生的第一件事是將存儲在flash中的向量表復(fù)制到RAM中。它們被復(fù)制到創(chuàng)建可執(zhí)行程序時(shí)在鏈接器文件中指定的位置。將向量表復(fù)制到RAM的一個(gè)原因是從RAM執(zhí)行比從flash執(zhí)行更快。這有助于減少系統(tǒng)中任何中斷調(diào)用的延遲。根據(jù)微控制器的特定架構(gòu),可能會有更新向量表寄存器的指令,以便微控制器知道RAM表的起始位置。

        






        接下來嵌入式開發(fā)人員將初始化的數(shù)據(jù)部分復(fù)制到 RAM 中,這通常是存儲在鏈接器的 .data 部分中的變量。 初始化數(shù)據(jù)的示例是靜態(tài)、全局和靜態(tài)局部變量,這些變量在編譯時(shí)提供了初始化值,這些是顯式定義,例如 int Var = 0x32;。

        在復(fù)制數(shù)據(jù)部分之后,還會復(fù)制 .bss 部分。 .bss 部分包含未顯式初始化或已初始化為零值的變量。 一個(gè)簡單的例子就是變量 static int Var; 將包含在本節(jié)中。

        最后,微控制器會將任何RAM功能從閃存復(fù)制到RAM。同樣,由于執(zhí)行速度稍快,有時(shí)從RAM而不是從flash執(zhí)行某些功能是值得的。這些函數(shù)通常由開發(fā)人員決定,并在編譯程序之前特意放在鏈接器文件中。

        這整個(gè)過程通常被稱為“C Copy Down”。 如果不執(zhí)行此復(fù)制,將無法正確設(shè)置 C 環(huán)境以執(zhí)行程序。 通常,一旦完成復(fù)制,微控制器就會跳轉(zhuǎn)到開發(fā)人員應(yīng)用程序開始的主程序的開始。

        微控制器引導(dǎo)過程實(shí)際上相對簡單。雖然它經(jīng)常是用匯編語言或其他一些晦澀難懂的方式編寫的,因此嵌入式開發(fā)人員很難清楚地理解微控制器實(shí)際上是如何進(jìn)入main的。相反,它看起來像一個(gè)非常復(fù)雜且?guī)缀醪豢芍倪^程,這使得引導(dǎo)代碼的定制開發(fā)成為一個(gè)潛在的痛苦過程。

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

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

      
      

      1. 免费国产午夜电影视频 | 亚洲大片在线免费看 | 中文字幕巨大的乳专区不卡顿 | 亚洲国内偷拍福利 | 日本中文字幕一二区视频 | 亚洲日本aⅴ片在线观看 |