亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        面向ARM Cortex-M系列MCU的嵌入式終端BIOS設(shè)計

        2021-05-14 03:57:54程宏玉王宜懷姚望舒黃志賢
        計算機(jī)應(yīng)用與軟件 2021年5期
        關(guān)鍵詞:用戶程序中斷嵌入式

        程宏玉 王宜懷 姚望舒 彭 濤 黃志賢

        (蘇州大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院 江蘇 蘇州 215000)

        0 引 言

        ARM架構(gòu)處理器在性能、功耗等方面的優(yōu)勢決定了其在芯片市場中不可取代的角色,其中Cortex-M系列微控制器(Microcontroller Unit,MCU)憑借出色的功耗和成本控制廣泛應(yīng)用于嵌入式系統(tǒng)領(lǐng)域。引導(dǎo)加載程序(Bootloader)是嵌入式系統(tǒng)在引導(dǎo)操作系統(tǒng)內(nèi)核或用戶程序之前運行的一段標(biāo)準(zhǔn)代碼,其主要功能是建立內(nèi)存空間映射,設(shè)置系統(tǒng)堆棧和系統(tǒng)啟動參數(shù)區(qū)等,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài)[1],其功能類似于PC端基本輸入輸出系統(tǒng)(BIOS)。

        當(dāng)前Bootloader的研究更多地關(guān)注嵌入式設(shè)備中操作系統(tǒng)的引導(dǎo)以及Bootloader在嵌入式終端中的移植:Sha等[2]設(shè)計了基于S3C2440開發(fā)板的Bootloader,完成Linux操作系統(tǒng)的啟動;Zhang等[3]成功將U-Boot移植到視頻監(jiān)控硬件平臺DM6446上。而關(guān)于如何利用Bootloader為嵌入式開發(fā)提供支撐的論述相對較少。與之相對,面向MCU的嵌入式應(yīng)用開發(fā)普遍存在難度大、周期長、移植困難等客觀問題,Bootloader程序的低復(fù)用率及其單一功能已難以滿足實際應(yīng)用需求。

        隨著嵌入式系統(tǒng)的發(fā)展,軟件構(gòu)件化已成為嵌入式開發(fā)的發(fā)展趨勢[4],相對于普通代碼級編程,以構(gòu)件為基本單位的嵌入式開發(fā)可有效提高編程顆粒度及應(yīng)用可移植性。本文以ARM Cortex-M系列MCU為平臺,在Bootloader中實現(xiàn)構(gòu)件實體和對應(yīng)索引的獨立部署,優(yōu)化Bootloader設(shè)計方案,在此基礎(chǔ)上提出嵌入式終端BIOS的概念及設(shè)計方法。

        1 嵌入式終端BIOS

        PC機(jī)BIOS作為預(yù)先安裝的固件,是上電啟動后運行的第一個程序,可為操作系統(tǒng)和應(yīng)用程序的運行提供通用底層軟件接口。嵌入式終端BIOS以Bootloader為原型,遵循構(gòu)件化軟件設(shè)計思想,以盡可能小的軟硬件資源為代價提高用戶程序開發(fā)效率。

        1.1 含 義

        嵌入式終端BIOS是固化于目標(biāo)設(shè)備指定非易失性存儲區(qū)域(如Flash)的標(biāo)準(zhǔn)應(yīng)用程序,與真正的用戶程序在物理空間分離。BIOS在完成傳統(tǒng)Bootloader啟動和初始化功能的基礎(chǔ)上,通過合理的存儲空間劃分實現(xiàn)底層驅(qū)動構(gòu)件的駐留,為用戶程序提供合理的調(diào)用接口;優(yōu)化BIOS到用戶程序的跳轉(zhuǎn)流程,并提供返回BIOS機(jī)制;實現(xiàn)中斷共享,擴(kuò)展用戶程序權(quán)限。

        1.2 嵌入式終端軟件架構(gòu)

        針對不同的MCU和應(yīng)用程序類型,其對應(yīng)的BIOS可能存在特殊功能或應(yīng)用需求[5]。從中抽取出共性需求,設(shè)計對應(yīng)的功能模塊,同時考慮不同MCU間的移植以最大限度降低BIOS開發(fā)和移植的開銷。結(jié)合實際應(yīng)用和理論分析,將BIOS需求概括為3類:程序跳轉(zhuǎn),底層驅(qū)動構(gòu)件駐留,共享中斷服務(wù)例程。

        以BIOS共性需求為出發(fā)點,為之封裝易于移植復(fù)用的獨立函數(shù)或文件,并借助ARM Cortex-M系列軟件接口標(biāo)準(zhǔn)[6](Cortex Microcontroller Software Interface Standard,CMSIS),抽象出圖1所示嵌入式終端軟件架構(gòu)。

        圖1 嵌入式終端軟件架構(gòu)

        1.3 BIOS執(zhí)行流程

        MCU上電后BIOS從指定Flash區(qū)域加載,完成系統(tǒng)初始化和存儲空間分配,在跳轉(zhuǎn)主函數(shù)之前建立供用戶程序調(diào)用的驅(qū)動函數(shù)接口表;隨后進(jìn)行跳轉(zhuǎn)判斷決定是否執(zhí)行中斷共享和運行狀態(tài)切換。BIOS執(zhí)行流程如圖2所示。

        圖2 BIOS執(zhí)行流程

        2 整體設(shè)計

        本文以NXP公司MKL36Z64VLH4[7](簡稱MKL36Z64)作為硬件平臺,闡述嵌入式終端BIOS的設(shè)計方法。MKL36Z64基于ARM Cortex-M0+內(nèi)核,最大運行速率48 MHz,F(xiàn)lash大小為64 KB,RAM空間為8 KB。

        2.1 空間劃分

        MCU存儲器空間的合理劃分是保證系統(tǒng)穩(wěn)定運行、充分發(fā)揮芯片性能的基礎(chǔ),劃分原則是BIOS在實現(xiàn)必要功能的前提下占用盡可能少的存儲空間,為用戶保留更多的可用資源。MCU存儲空間的劃分可通過修改對應(yīng)MCU工程中的鏈接文件實現(xiàn)。鏈接文件是一種規(guī)則性文件,它決定在鏈接步驟中MCU各存儲介質(zhì)的起始地址和空間大小,并指示各段數(shù)據(jù)的存儲位置[8]。不同芯片廠商提供的鏈接文件格式及語法表示有所差異,但基本內(nèi)涵一致。MKL36Z64中鏈接文件配置方式如圖3所示。

        圖3 鏈接文件配置方式

        通過鏈接文件的配置,將目標(biāo)MCU的Flash區(qū)域一分為二,BIOS占據(jù)26 KB的空間,用戶程序使用剩余空間,實現(xiàn)物理空間的分離,最終Flash劃分情況如圖4所示。

        圖4 MKL36Z64 Flash劃分圖

        2.2 程序跳轉(zhuǎn)

        BIOS向用戶程序跳轉(zhuǎn)的判斷一般需借助特定標(biāo)識信息,這個標(biāo)識信息可以是某個特定GPIO引腳狀態(tài)[9]或是存儲在帶電可擦可編程只讀存儲器(Electrically Erasable Programmable Read-Only Memory,EEPROM)中某個標(biāo)識位的值[10]。前者在實現(xiàn)上最為簡單,但依賴單個GPIO引腳狀態(tài),可靠性相對較低;后者可靠性高但需要特定外設(shè)支持,通用性相對較差。本文選擇在RAM區(qū)域中開辟一段獨立的空間保存判斷程序跳轉(zhuǎn)的標(biāo)識信息,該段區(qū)域處于data段和bss段之間,具有熱復(fù)位變量不清除的特性,即程序跳轉(zhuǎn)或正常軟件復(fù)位不會干預(yù)定義在該段區(qū)域中的變量值。以定義在該段區(qū)域中的標(biāo)識信息作為程序跳轉(zhuǎn)依據(jù)擺脫硬件限制的同時具有更高的可靠性。

        BIOS向用戶程序的跳轉(zhuǎn)參考MCU啟動流程,在Cortex-M系列MCU中主要涉及主棧指針(Main Stack Pointer,MSP)指針和程序計數(shù)器(Program Counter,PC)的設(shè)置。其中:MSP默認(rèn)指向棧頂位置;PC存放下一條待運行指令的地址。當(dāng)系統(tǒng)由BIOS跳轉(zhuǎn)至用戶程序時,軟件上主動從用戶程序Flash區(qū)域取出棧頂指針重新賦值MSP,然后利用函數(shù)指針的方式跳轉(zhuǎn)至用戶程序復(fù)位向量,完成BIOS到用戶程序的跳轉(zhuǎn)。

        用戶程序一般由具體開發(fā)者編寫并燒入設(shè)備,系統(tǒng)由BIOS跳轉(zhuǎn)到用戶程序執(zhí)行后,程序運行中發(fā)生的錯誤或異??赡軐φ麄€系統(tǒng)造成不可逆的影響,提供必要的防錯手段是嵌入式系統(tǒng)穩(wěn)定運行的重要保障。本文利用非可屏蔽中斷(Non Maskable Interrupt,NMI)使系統(tǒng)由用戶程序強(qiáng)制跳轉(zhuǎn)回BIOS,并持續(xù)運行在BIOS中直至程序錯誤修復(fù)。NMI優(yōu)先級僅次于復(fù)位中斷,可在系統(tǒng)停止響應(yīng)或出現(xiàn)無法處理的異常時通過將芯片對應(yīng)引腳拉低的方式觸發(fā),從而保證系統(tǒng)整體的可維護(hù)性與可靠性。程序跳轉(zhuǎn)流程如圖5所示。

        (a) BIOS跳轉(zhuǎn)用戶程序 (b) 用戶程序跳轉(zhuǎn)BIOS圖5 程序跳轉(zhuǎn)流程

        2.3 中斷向量表重定向

        中斷向量表是按照中斷源的中斷向量號以固定順序存放中斷服務(wù)例程入口地址的一段存儲區(qū)域,其默認(rèn)存儲位置為Flash起始地址。當(dāng)觸發(fā)中斷事件時MCU從中斷向量表中取得指定中斷服務(wù)例程的入口地址并轉(zhuǎn)而執(zhí)行該中斷服務(wù)例程。BIOS和用戶程序是物理空間上獨立的應(yīng)用程序,默認(rèn)情況下?lián)碛懈髯缘闹袛嘞蛄勘砑皩?yīng)的中斷服務(wù)例程。但在實際場景中用戶程序需要使用BIOS中定義的某些系統(tǒng)服務(wù),即兩段應(yīng)用程序需共享中斷服務(wù)。

        修改中斷向量表表項,使其指向BIOS中斷服務(wù)例程的物理地址,可實現(xiàn)中斷服務(wù)例程的共享。該方法存在兩個問題:(1) Flash以扇區(qū)為單位擦除的特點決定了修改某一表項內(nèi)容的復(fù)雜性且過程難以向用戶開放;(2) 用戶必須提前獲知BIOS中斷服務(wù)例程的地址,無法實現(xiàn)動態(tài)修改。本文實現(xiàn)一種將中斷向量表拷貝至RAM,動態(tài)修改中斷向量表的方案。不同于Flash,RAM無須以扇區(qū)為最小操作單元。在跳轉(zhuǎn)用戶程序之前將BIOS的中斷向量表拷貝至特定RAM段,跳轉(zhuǎn)完成后用戶程序可選擇修改RAM區(qū)中斷向量表任一表項內(nèi)容。

        在ARM Cortex-M處理器中以向量表偏移寄存器(Vector Table Offset Register,VTOR)定位中斷向量表位置。在完成數(shù)據(jù)拷貝后,須將VTOR重新賦值為RAM區(qū)中斷向量表的起始位置,真正完成中斷向量表的重定向。

        2.4 驅(qū)動構(gòu)件函數(shù)接口

        與Bootloader程序不同,BIOS內(nèi)駐留了嵌入式常用驅(qū)動,如GPIO、UART、Flash、I2C、SPI、PWM等,并提供了函數(shù)原型級調(diào)用接口。用戶程序不需要從“零”編起,而是在相應(yīng)框架基礎(chǔ)上,充分應(yīng)用BIOS資源,實現(xiàn)快捷編程。

        驅(qū)動函數(shù)的駐留一般采用在固定地址存放函數(shù)接口表的方式,但該方法需在BIOS特定存儲區(qū)域開辟固定大小的存儲空間,不利于程序移植和動態(tài)更新。本文利用請求管理調(diào)用(Supervisor Call,SVC)方式實現(xiàn)駐留驅(qū)動的調(diào)用,其思想借鑒DOS下的系統(tǒng)功能調(diào)用。在DOS操作系統(tǒng)中系統(tǒng)功能的調(diào)用是一個具有多種功能服務(wù)程序的軟中斷指令,DOS操作系統(tǒng)將特定功能編號,并向用戶提供編號列表[11]。用戶需要調(diào)用DOS系統(tǒng)功能時,將指定系統(tǒng)功能編號存入AH寄存器,并通過主動觸發(fā)INT 21H中斷實現(xiàn)系統(tǒng)服務(wù)調(diào)用。

        SVC是ARM處理器中提供的一種能夠使任務(wù)觸發(fā)特定OS異常的軟件中斷機(jī)制,它既是一條指令,也是一種中斷[12]。SVC指令包含一個8位立即數(shù),理論上可利用SVC指令實現(xiàn)255種不同的服務(wù),其中0號服務(wù)由操作系統(tǒng)占用。本文使用SVC的1號服務(wù)獲取驅(qū)動函數(shù)接口表,并預(yù)留其他服務(wù)接口作為系統(tǒng)功能擴(kuò)展。根據(jù)Cortex-M系列處理器的中斷機(jī)制,進(jìn)入SVC中斷服務(wù)例程后,SVC指令編號可通過棧中PC寄存器值獲取,堆棧狀態(tài)如圖6所示。

        圖6 SVC中斷發(fā)生時堆棧狀態(tài)

        用戶程序需要使用BIOS駐留驅(qū)動函數(shù)時主動觸發(fā)SVC中斷,在其中斷服務(wù)例程中將函數(shù)接口表的地址作為返回參數(shù)傳遞至SVC中斷調(diào)用處,用戶根據(jù)驅(qū)動函數(shù)在表中的偏移量調(diào)用具體功能函數(shù)。獲取驅(qū)動函數(shù)接口表流程如圖7所示。

        圖7 獲取驅(qū)動函數(shù)接口表流程

        3 可移植性研究

        可移植性是軟件質(zhì)量的重要屬性,本文結(jié)合BIOS終端程序框架,闡述ARM Cortex-M系列MCU之間移植方法。

        3.1 BIOS工程框架

        結(jié)構(gòu)清晰、組織合理的工程框架是軟件可移植、可復(fù)用的基礎(chǔ)[13]。針對嵌入式應(yīng)用開發(fā)特點、兼顧BIOS在不同MCU間的移植,建立圖8所示BIOS工程框架。

        圖8 BIOS工程框架

        其中:Core存放內(nèi)核文件,主要完成核內(nèi)外設(shè)訪問控制、外設(shè)寄存器訪問權(quán)限設(shè)置、特設(shè)功能函數(shù)接口定義;MCU文件涉及芯片初始化、中斷向量表定義、啟動流程、外設(shè)驅(qū)動的具體實現(xiàn)等相關(guān)內(nèi)容;UserBoard存放應(yīng)用級硬件驅(qū)動;SoftComponent存放BIOS具體功能構(gòu)件,projectJump實現(xiàn)程序跳轉(zhuǎn),svc提供驅(qū)動函數(shù)調(diào)用列表,cpy_nvic實現(xiàn)中斷服務(wù)例程共享;NosPrg存放BIOS主程序文件、中斷服務(wù)例程文件。

        3.2 移植分析

        3.1節(jié)所述程序框架已將相關(guān)文件按功能、軟硬件結(jié)構(gòu)合理部署,結(jié)合BIOS功能模塊的構(gòu)件化設(shè)計,可以較小的代價完成BIOS程序在不同芯片間移植。以MKL36Z64中BIOS為基準(zhǔn),表1給出BIOS在Cortex-M0+內(nèi)核的MKW01Z128[14]以及Cortex-M4F內(nèi)核的MSP432P401R[15]兩款MCU上的移植比較。

        表1 BIOS在不同MCU間移植比較

        可以看出,BIOS在相同內(nèi)核MCU間的移植只需修改MCU文件,不同內(nèi)核間的移植因架構(gòu)差異改動量稍有增加。但得益于構(gòu)件化結(jié)構(gòu)設(shè)計,BIOS功能構(gòu)件移植時無須改動,這在最大程度上保證了方案可移植性。

        4 結(jié) 語

        嵌入式應(yīng)用程序與目標(biāo)設(shè)備之間的高度耦合決定了其開發(fā)和移植的復(fù)雜性,降低硬件差異影響、抽象共性開發(fā)技術(shù)是提高應(yīng)用開發(fā)效率的關(guān)鍵。本文以ARM Cortex-M系列MCU為平臺,提出嵌入式終端BIOS的概念和設(shè)計方法,結(jié)合構(gòu)件化設(shè)計思想,提高終端程序可移植性;優(yōu)化Bootloader實現(xiàn)關(guān)鍵技術(shù),為用戶提供構(gòu)件級開發(fā)支撐,有效降低用戶程序開發(fā)難度。

        猜你喜歡
        用戶程序中斷嵌入式
        變速箱控制系統(tǒng)Bootloader設(shè)計與實現(xiàn)
        嵌入式設(shè)備遠(yuǎn)程升級方案設(shè)計
        搭建基于Qt的嵌入式開發(fā)平臺
        跟蹤導(dǎo)練(二)(5)
        千里移防,衛(wèi)勤保障不中斷
        解放軍健康(2017年5期)2017-08-01 06:27:44
        嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
        C8051F410單片機(jī)BootLoader的實現(xiàn)
        Altera加入嵌入式視覺聯(lián)盟
        倍福 CX8091嵌入式控制器
        自動化博覽(2014年4期)2014-02-28 22:31:15
        AT89C51與中斷有關(guān)的寄存器功能表解
        二区视频在线免费观看| 亚洲AV激情一区二区二三区| 精品国产日韩无 影视| 国产精品麻豆一区二区三区| 妺妺窝人体色777777| 看全色黄大色大片免费久久| 国产在线无码免费视频2021| 亚洲熟女一区二区三区不卡| 午夜视频在线观看视频在线播放| 日夜啪啪一区二区三区| 99热最新在线观看| 最新国产成人自拍视频| 国产成人久久精品一区二区三区| 国产特级毛片aaaaaaa高清| 亚洲最新版无码AV| 精品在线亚洲一区二区三区| 26uuu在线亚洲欧美| 9lporm自拍视频区| 久久亚洲av成人无码软件| 熟女一区二区国产精品| 正在播放老肥熟妇露脸| 精品乱码一区二区三区四区| 秋霞国产av一区二区三区| 在线观看 国产一区二区三区| 亚洲码国产精品高潮在线| 亚洲色大成网站www在线观看 | 国产精品亚洲一区二区极品| 亚洲一区二区刺激的视频| 国产午夜精品一区二区| 国产婷婷丁香久久综合| 国内激情一区二区视频| 国产av无码专区亚洲a∨毛片 | av天堂手机在线免费| 国产av在线观看久久| 成人黄色网址| 鲁丝一区鲁丝二区鲁丝三区| 久久一区二区国产精品| 边喂奶边中出的人妻| 无码av在线a∨天堂毛片| 亚洲中文字幕综合网站| 东京热久久综合久久88|