freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

嵌入式開發(fā)環(huán)境的建立(編輯修改稿)

2025-06-20 10:38 本頁面
 

【文章內(nèi)容簡介】 ss段 ? 符號 ?Image_RO_Limit ?Image_RW_Base ?Image_ZI_Base ?Image_ZI_Limit ? GCC庫專用 ? 調(diào)試信息 鏈接腳本示例 ? 程序在 SDRAM中運行 ? 程序在 FLASH中運行 在 RAM運行程序結(jié)構(gòu)圖 A 編譯時代碼結(jié)構(gòu)代碼段 ( RO )只讀數(shù)據(jù)段 ( RO )......ROM 起始地址?RAM 結(jié)束地址ROM 起始地址讀寫數(shù)據(jù)段 ( RW )B SS 段 ( RW )RAM 起始地址B 運行開始代碼結(jié)構(gòu)代碼段 ( RO )只讀數(shù)據(jù)段 ( RO )讀寫數(shù)據(jù)段 ( RW )B SS 段 ( RW )RAM 起始地址?RAM 結(jié)束地址在 ROM運行程序結(jié)構(gòu)圖 代碼段 ( RO )只讀數(shù)據(jù)段 ( RO )讀寫數(shù)據(jù)段 ( RW )BSS 段 ( RW )???A 編譯時代碼結(jié)構(gòu)代碼段 ( RO )只讀數(shù)據(jù)段 ( RO )......R OM 起始地址?R AM 結(jié)束地址R OM 起始地址讀寫數(shù)據(jù)段 ( RW )BSS 段 ( RW )R AM 起始地址B 運行開始代碼結(jié)構(gòu)啟動代碼 ? 由于 ARM軟件編程一般采用高級語言,如 C語言,因此在系統(tǒng)啟動后必須有一段程序能夠?qū)PU帶入到能夠運行 C語言的狀態(tài),這段程序就是啟動代碼。 ? 啟動代碼通常用匯編語言完成,并在系統(tǒng)復(fù)位入口點( ARM系統(tǒng)中為 0地址)運行。 ? 在嵌入式系統(tǒng)中系統(tǒng)復(fù)位入口點所在的硬件通常是 Flash等芯片,存儲在這些芯片中的數(shù)據(jù)即使掉電也能夠保存,而且這個地方的硬件的訪問寬度是由硬件設(shè)計決定,軟件不能更改,這樣就能保證上電后該地址的數(shù)據(jù)有效。 啟動代碼主要功能 (1) 建立異常向量表 初始化硬件:初始化 RAM、關(guān)閉中斷、關(guān)閉看門狗等 初始化堆棧 初始化讀寫數(shù)據(jù)段、 BSS段: 在 ROM中運行的程序必須將數(shù)據(jù)段從 ROM中拷貝到 RAM中,并將 BSS段清零; 在 RAM中運行的程序則需要將 BSS段清零,然后將整個代碼段、只讀數(shù)據(jù)段、讀寫數(shù)據(jù)段和 BSS段從 ROM拷貝到 RAM。 啟動代碼主要功能 (2) 重定向 ? 位置無關(guān)的代碼是指該代碼不用在編譯指定的地址 運行也能保證程序的執(zhí)行流程和執(zhí)行邏輯不會改變。 ? 位置相關(guān)代碼運行的地址必須和編譯時的地址一致,否則將導(dǎo)致程序運行流程改變。 ? 在初始化程序區(qū)、數(shù)據(jù)區(qū)之后需要一條跳轉(zhuǎn)指令將 PC跳轉(zhuǎn)到編譯時指定的運行地址接著運行。 LDR指令及之前的指令都在 ROM中運行,而 startram標(biāo)號之后的代碼則跳轉(zhuǎn)到編譯時指定的地址( RAM或者 ROM中)中運行了,因為 startram標(biāo)號表示的地址是由編譯時就確定的。這個過程就是重定向。 LDR PC, = startram startram : … 重定向之前運行的代碼必須是位置無關(guān)的代碼。 啟動代碼主要功能 (3) 跳轉(zhuǎn)到 C代碼 LDR PC,=Main 啟動代碼分析 ? 在基于 ARM920T core的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時都從地址 0x00000000開始執(zhí)行,因此在這個地址處安排的通常就是系統(tǒng)的啟動代碼。 ? 它通常也是 BootLoader程序的一部分,可以在啟動代碼基礎(chǔ)上編寫 BootLoader。 ? 用匯編語言編寫。 ? 啟動代碼是在復(fù)位后運行其它程序之前運行的一段小程序。通過它,初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用 C函數(shù)準(zhǔn)備好正確的環(huán)境。 啟動代碼的移植和修改 ? 啟動代碼除了依賴于 CPU 的體系結(jié)構(gòu)外,實際上也依賴于具體的嵌入式板級設(shè)備的配置,比如板卡的硬件地址分配, RAM芯片的類型,其他外設(shè)的類型等。 ? 對于兩塊不同的嵌入式板而言,即使它們是基于同一種 CPU而構(gòu)建的,如果他們的硬件資源和配置不一致的話,要想讓運行在一塊板子上的啟動代碼也能運行在另一塊板子上,也還是需要作一些必要的修改。 啟動代碼流程圖 ? 啟動代碼的功能: RAM初始化,設(shè)置各個部件的時鐘和片選,將 BootLoader拷貝到 RAM中,設(shè)置堆棧,調(diào)用 C函數(shù)。 ? 注意:在本階段,特別是在堆棧設(shè)置之前,進行函數(shù)調(diào)用(也有些匯編子程序不需要使用堆棧)或者使用堆棧保存數(shù)據(jù)將產(chǎn)生不可預(yù)知的結(jié)果; Boot Loader 入 口設(shè)置中斷向量表切換到超級模式,并禁止中斷ResetHandler: 復(fù)位入口設(shè)置中斷模式,關(guān)閉所有中斷初始化硬件關(guān)閉看門狗使能回寫B(tài) u f f e r 和C a c h e設(shè)置非C a c h e 區(qū)域設(shè)置端口關(guān)閉數(shù)據(jù)線0 -1 5 上拉設(shè)置外部中斷的觸發(fā)方式設(shè)置時鐘設(shè)置C P U 的運行頻率,系統(tǒng)各部件的總線礦寬度以及各部件的時鐘將B o o t L o a d e r 拷貝到R A M拷貝代碼到R A M跳至C 代碼程序 設(shè)置異常跳轉(zhuǎn)表 ? 復(fù)位異常直接跳轉(zhuǎn)到 ResetHandler處,它是相對跳轉(zhuǎn),位置無關(guān)。 關(guān)閉看門狗 ? 設(shè)置 S3C2410 WTCON寄存器 ? 必須設(shè)置 0x01e00000 d3 設(shè)置中斷模式并禁止中斷 ? 設(shè)置 S3C2410中斷寄存器 ? 設(shè)置所有一級中斷源與二級中斷源為不可用狀態(tài) 配置存儲器控制寄存器寬度 0x01e00000 配置值 堆棧初始化 C代碼初始化 拷貝 RW數(shù)據(jù)段 ZI段清零 跳轉(zhuǎn)到 Main函數(shù)處執(zhí)行 BootLoader的基本概念 ? BootLoader是系統(tǒng)加電后運行的第一段軟件代碼。 ? 嵌入式系統(tǒng)中,整個系統(tǒng)的加載啟動任務(wù)完全由 BootLoader來完成。比如在一個基于 ARM920T core的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時都從地址 0x00000000開始執(zhí)行,而在這個地址處安排的通常就是系統(tǒng)的 BootLoader程序。 ? 簡單地說, BootLoader就是在操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序準(zhǔn)備好正確的環(huán)境。 BootLoader 的移植和修改 ? BootLoader除了依賴于 CPU 的體系結(jié)構(gòu)外,BootLoader 實際上也依賴于具體的嵌入式板級設(shè)備的配置,比如板卡的硬件地址分配, RAM芯片的類型,其他外設(shè)的類型等。 ? 對于兩塊不同的嵌入式板而言,即使它們是基于同一種 CPU而構(gòu)建的,如果他們的硬件資源和配置不一致的話,要想讓運行在一塊板子上的BootLoader程序也能運行在另一塊板子上,也還是需要作一些必要的修改。 系統(tǒng)啟動和 Bootloader ? 通常, Boot Loader 是嚴(yán)重地依賴于硬件而實現(xiàn)的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個通用的 Boot Loader 幾乎是不可能的。盡管如此,我們?nèi)匀豢梢詫? Boot Loader 歸納出一些通用的概念來,以指導(dǎo)用戶特定的 Boot Loader 設(shè)計與實現(xiàn)。 ? 處理器啟動方式 基本原理:硬件復(fù)位 處理器模式 設(shè)置程序指針 PC和堆棧指針 SP轉(zhuǎn)向執(zhí)行 PC處的代碼。 典型處理器舉例: X86:硬件復(fù)位后,進入實模式,執(zhí)行 FFFF:0000處的代碼(實際為BIOS代碼) ARM(S3C24 SA11 STA2021):硬件復(fù)位后,一般進入管理模式,執(zhí)行地址為 0處的代碼 (多為 Flash,與處理器配置有關(guān) ) 68K(68EZ32 68VZ328):硬件復(fù)位后,一般進入 Supervisor模式,執(zhí)行地址為 0處指示的 Flash代碼 嵌入式 Linux系統(tǒng)基本組成 初始化啟動代碼: Bootloader 嵌入式 Linux操作系統(tǒng)內(nèi)核: k
點擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1