李志嬡 王宜懷 劉長(zhǎng)勇
摘 要:針對(duì)實(shí)時(shí)操作系統(tǒng)復(fù)雜性內(nèi)核導(dǎo)致嵌入式應(yīng)用程序編譯速度慢、可復(fù)用性差的問(wèn)題,提出基于通用嵌入式計(jì)算機(jī)架構(gòu)(GEC)的RT-Thread實(shí)時(shí)操作系統(tǒng)駐留方法。在合理劃分存儲(chǔ)空間的基礎(chǔ)上,通過(guò)對(duì)中斷服務(wù)例程進(jìn)行共享,為用戶提供底層驅(qū)動(dòng)與軟件應(yīng)用層的函數(shù)調(diào)用服務(wù)。最后以D1-H應(yīng)用處理器為例進(jìn)行RT-Thread駐留測(cè)試。實(shí)踐結(jié)果表明,該駐留方法實(shí)現(xiàn)了系統(tǒng)內(nèi)核與應(yīng)用程序的物理隔離,編譯時(shí)間更短,開(kāi)發(fā)效率更高,為嵌入式程序開(kāi)發(fā)的時(shí)效性、便捷性和簡(jiǎn)易性提供了應(yīng)用基礎(chǔ)。
關(guān)鍵詞:實(shí)時(shí)操作系統(tǒng);應(yīng)用處理器;通用嵌入式計(jì)算機(jī);駐留;函數(shù)調(diào)用
中圖分類號(hào):TP316.2?? 文獻(xiàn)標(biāo)志碼:A?? 文章編號(hào):1001-3695(2024)01-034-0222-04
doi:10.19734/j.issn.1001-3695.2023.04.0223
Resident method of RT-Thread based on D1-H multimedia application processor
Abstract:This paper proposed a method for the residency of the RT-Thread real-time operating system based on the general embedded computer (GEC) architecture to address the issues of slow compilation speed and poor reusability caused by the complexity of the real-time operating system kernel in embedded applications.On the basis of reasonable storage space allocation,the method achieved the sharing of interrupt service routines,providing users with function call services for both low-level drivers and software application layers.Finally,the residency method was tested using the D1-H application processor as an example.And the results demonstrate that it achieves physical isolation between the system kernel and application programs,resulting in shorter compilation time and higher development efficiency.This method provides a foundation for the timeliness,convenience,and simplicity of embedded program development.
Key words:real time operation system;multimedia application processor;general embedded computer;residency;function call? 實(shí)時(shí)操作系統(tǒng)(RTOS)[1]作為面向應(yīng)用處理器的重要工具和運(yùn)行載體,不僅能有效管理和利用處理器資源,而且實(shí)現(xiàn)了應(yīng)用程序的模塊化管理與并發(fā)性執(zhí)行,保證了嵌入式系統(tǒng)的安全性、可靠性和實(shí)時(shí)性。在RTOS的應(yīng)用程序開(kāi)發(fā)中,仍存在因RTOS源碼被誤改或代碼量較大而影響編譯效率與系統(tǒng)穩(wěn)定性的現(xiàn)象。若在物理層面實(shí)現(xiàn)RTOS源碼與應(yīng)用程序的隔離,同時(shí)利用好RTOS為軟件開(kāi)發(fā)提供的高效服務(wù),則能夠在降低開(kāi)發(fā)難度的基礎(chǔ)上提升開(kāi)發(fā)效率。借助GEC架構(gòu)從功能層面將基本輸入輸出系統(tǒng)(basic input and output system,BIOS)與用戶程序(user)進(jìn)行有效分割的思想,將RTOS駐留在BIOS內(nèi),實(shí)現(xiàn)對(duì)嵌入式應(yīng)用程序編程顆粒度和可復(fù)用性的提高。目前,已有部分學(xué)者對(duì)操作系統(tǒng)的駐留應(yīng)用進(jìn)行了相關(guān)研究,如:楊靜遠(yuǎn)等人[2]提出了一種基于ARINC653標(biāo)準(zhǔn)的分區(qū)操作系統(tǒng)固化映像啟動(dòng)配置策略;Chen等人[3]以Quark分區(qū)操作系統(tǒng)作為研究對(duì)象,基于微內(nèi)核架構(gòu)配置分區(qū)來(lái)實(shí)現(xiàn)系統(tǒng)實(shí)時(shí)性能的提升;白曦等人[4]參考分區(qū)操作系統(tǒng)時(shí)空隔離機(jī)制,設(shè)計(jì)了機(jī)電軟件開(kāi)發(fā)平臺(tái),將復(fù)雜業(yè)務(wù)應(yīng)用分解為功能單一的多個(gè)業(yè)務(wù)應(yīng)用,將其獨(dú)立駐留在不同分區(qū),保證了應(yīng)用的健壯性。
RT-Thread[5]是一個(gè)集RTOS內(nèi)核與中間層組件于一體的開(kāi)源物聯(lián)網(wǎng)操作系統(tǒng)(IoT OS)[6],支持可靠性、實(shí)時(shí)性、高可伸縮性,被廣泛應(yīng)用于智能家居、工業(yè)自動(dòng)化、國(guó)防軍工、消費(fèi)電子等眾多領(lǐng)域。本文依據(jù)通用嵌入式計(jì)算機(jī)思想構(gòu)建D1-H[7]芯片軟件框架,將RT-Thread與底層驅(qū)動(dòng)駐留于BIOS程序,通過(guò)函數(shù)映射的方式為用戶在USER程序開(kāi)發(fā)提供構(gòu)件級(jí)應(yīng)用,降低了編程門(mén)檻、提高了開(kāi)發(fā)效率、保障了系統(tǒng)穩(wěn)定,從而提高嵌入式應(yīng)用程序的易用性、穩(wěn)定性和可復(fù)用性。
1 RTOS駐留方法共性技術(shù)研究
RTOS作為嵌入式系統(tǒng)的核心組件,在系統(tǒng)啟動(dòng)后處于持續(xù)存在和運(yùn)行的狀態(tài),負(fù)責(zé)高效地管理有限的資源以滿足任務(wù)調(diào)度的實(shí)時(shí)性能需求。其駐留實(shí)現(xiàn)方式因系統(tǒng)和應(yīng)用需求而異,但其目的都是確保嵌入式系統(tǒng)的實(shí)時(shí)性和可靠性。
1.1 通用嵌入式計(jì)算機(jī)架構(gòu)
為了解決在嵌入式軟件開(kāi)發(fā)中存在的編程顆粒度低、可移植性弱等問(wèn)題,通用嵌入式計(jì)算機(jī)GEC基于模塊共性知識(shí)要素對(duì)底層驅(qū)動(dòng)進(jìn)行構(gòu)件化,并采用類PC機(jī)開(kāi)發(fā)模式將嵌入式軟件分為BIOS程序與user程序兩部分[8],如圖1所示。其中,BIOS程序固化于MCU的非易失性存儲(chǔ)器中,MCU上電啟動(dòng)時(shí),先運(yùn)行BIOS程序,再跳轉(zhuǎn)至user程序,隨后在user程序中啟動(dòng)操作系統(tǒng)RT-Thread。在GEC架構(gòu)下,BIOS程序?yàn)閡ser程序提供工作時(shí)鐘與函數(shù)原型級(jí)調(diào)用接口,用戶在基于標(biāo)準(zhǔn)軟件工程框架的user程序中進(jìn)行應(yīng)用開(kāi)發(fā),通過(guò)調(diào)用BIOS程序提供的構(gòu)件進(jìn)行快速編程。GEC架構(gòu)從存儲(chǔ)空間和功能定義兩個(gè)方面實(shí)現(xiàn)了BIOS程序與user程序的合理劃分,為RT-Thread的駐留提供了應(yīng)用基礎(chǔ)。以BIOS程序作為先導(dǎo)程序,實(shí)現(xiàn)RT-Thread在MCU硬件層的固化,用戶則專注于軟件層,在user程序中進(jìn)行應(yīng)用開(kāi)發(fā)。下面從共性角度對(duì)RT-Thread駐留在BIOS的關(guān)鍵點(diǎn)進(jìn)行分析。a)MCU的存儲(chǔ)資源是RTOS在實(shí)際應(yīng)用中的首要考慮因素,尤其是在使用大多低成本終端設(shè)備時(shí),其flash和RAM資源更為有限。因此,為了避免出現(xiàn)BIOS程序與user程序在物理地址上沖突而導(dǎo)致代碼重疊、變量越界等問(wèn)題,需要對(duì)存儲(chǔ)資源進(jìn)行合理有效的劃分與利用。b)RTOS的核心功能是通過(guò)調(diào)度器對(duì)線程進(jìn)行管理,當(dāng)RTOS駐留在BIOS程序后,為了實(shí)現(xiàn)調(diào)度器在user程序中的運(yùn)轉(zhuǎn),對(duì)系統(tǒng)中斷服務(wù)例程進(jìn)行共享是實(shí)現(xiàn)BIOS程序與user程序在空間上保持聯(lián)動(dòng)的必要項(xiàng)。c)RTOS具有豐富的函數(shù)調(diào)用接口,例如線程創(chuàng)建啟動(dòng)、線程狀態(tài)轉(zhuǎn)換以及線程上下文切換等,RTOS駐留后,在user程序中不包含函數(shù)接口,用戶無(wú)法直接在user程序中調(diào)用函數(shù)。因此,如何定位并調(diào)用函數(shù)是RTOS駐留后正常使用系統(tǒng)服務(wù)的關(guān)鍵。
1.2 RTOS駐留方法研究與對(duì)比
RTOS作為運(yùn)行在CPU內(nèi)部的程序,通常與用戶程序一同編譯,導(dǎo)致存儲(chǔ)空間與CPU算力的開(kāi)銷增長(zhǎng),文獻(xiàn)[9]利用現(xiàn)場(chǎng)可編程邏輯門(mén)陣列(FPGA)將μC/OS-Ⅲ內(nèi)核硬件化,通過(guò)定制硬件調(diào)度器進(jìn)行任務(wù)調(diào)度,使得CPU專注于用戶任務(wù)的運(yùn)算,從而實(shí)現(xiàn)系統(tǒng)內(nèi)核與用戶任務(wù)的隔離。這種方法具有直接在硬件層面運(yùn)行的優(yōu)勢(shì),可以利用FPGA的并行計(jì)算能力與低功耗特性,提供高度可定制化的解決方案,但同時(shí)也面臨著復(fù)雜的硬件設(shè)計(jì)與開(kāi)發(fā)流程,不具備通用性、可移植性與擴(kuò)展性,技術(shù)實(shí)現(xiàn)難度較大。文獻(xiàn)[10]針對(duì)人造器官軟件更新的應(yīng)用場(chǎng)景,提出部分動(dòng)態(tài)軟件更新機(jī)制,通過(guò)將輕量級(jí)實(shí)時(shí)操作系統(tǒng)Cyborgan OS的內(nèi)核駐留在固定代碼區(qū)域,實(shí)現(xiàn)應(yīng)用程序的增量更新與功能升級(jí),該方法在確保系統(tǒng)穩(wěn)定性和可靠性的前提下,提供了更加靈活和高效的軟件更新方案。文獻(xiàn)[11]基于汽車嵌入式實(shí)時(shí)操作系統(tǒng)的順序內(nèi)核展開(kāi)形式建模和驗(yàn)證研究,通過(guò)擴(kuò)展C-IL / CC- IL配置狀態(tài)模型,為操作系統(tǒng)和可信任應(yīng)用程序的內(nèi)存隔離提供基礎(chǔ)機(jī)制,保障嵌入式系統(tǒng)的設(shè)計(jì)和開(kāi)發(fā),提高了系統(tǒng)的可維護(hù)性和可擴(kuò)展性。以上兩種方案通過(guò)固定代碼駐留RTOS的思想,為本文研究提供了重要的參考價(jià)值。不同的RTOS駐留方法在實(shí)時(shí)性能、資源利用率、開(kāi)發(fā)復(fù)雜度以及可移植性等方面存在著差異。選擇合適的駐留方法需要綜合考慮具體的應(yīng)用需求和系統(tǒng)要求。通過(guò)對(duì)上述方法的介紹和對(duì)比,可以進(jìn)一步驗(yàn)證本文方法的科學(xué)性和創(chuàng)新之處,并為讀者提供更全面的研究視角。
2 基于D1-H的GEC軟件框架設(shè)計(jì)與實(shí)現(xiàn)
嵌入式軟件工程由若干不同類型的文件組成,其中包括程序文件、頭文件、與編譯調(diào)試相關(guān)的文件、工程說(shuō)明文件、開(kāi)發(fā)環(huán)境生成文件等,基于GEC架構(gòu)的層次化原則,將BIOS程序和user程序按照功能定義進(jìn)行邏輯劃分,通過(guò)清晰的層次結(jié)構(gòu)為長(zhǎng)期的軟件維護(hù)和功能拓展提供保障。
1)BIOS程序工程框架 BIOS工程框架如表1所示,依據(jù)“分門(mén)別類,各有歸處”的原則將RT-Thread源碼駐留在BIOS程序的05_UserBoard文件夾,并在該文件下通過(guò)自定義的OsFunc.c程序?qū)T-Thread的啟動(dòng)流程進(jìn)行統(tǒng)一收攏,由OS_start函數(shù)調(diào)用RT-Thread實(shí)際的啟動(dòng)函數(shù)。
2)user程序工程框架 user程序工程框架的組織架構(gòu)與BIOS基本一致,不同之處在于05_UserBoard文件中的RT-Thread源碼被替換為了Os_Self_API.h文件,在07_AppPrg中增加了threadauto_appinit.c文件。其中,Os_Self_API.h頭文件是按照RT-Thread中的原函數(shù)進(jìn)行重映射的接口文件,threadauto_appinit.c則用于存放RT-Thread操作系統(tǒng)中的自啟動(dòng)線程函數(shù)app_init,即BIOS程序中函數(shù)OS_start的入口參數(shù),對(duì)于用戶而言,app_init則是進(jìn)行應(yīng)用程序開(kāi)發(fā)的快速入口。
3 基于D1-H實(shí)現(xiàn)RT-Thread駐留的關(guān)鍵要素
在GEC架構(gòu)下,BIOS與user在物理空間中是相互獨(dú)立的軟件工程,但兩者的代碼和變量都是在MCU的同一存儲(chǔ)空間下運(yùn)行和定義的,若要成功實(shí)現(xiàn)RT-Thread的駐留,首先要對(duì)D1-H的flash與雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(double data rate,DDR)進(jìn)行合理分區(qū),從而保障RT-Thread正常調(diào)度運(yùn)行。
3.1 片外flash與DDR的空間劃分
flash區(qū)主要用于保存工程編譯后的機(jī)器碼,包含了程序代碼、中斷向量和常數(shù)等。為確保用戶層的可擴(kuò)展性,在滿足BIOS程序基本存儲(chǔ)空間需求后,將flash存儲(chǔ)空間的剩余量一并劃分到user程序下。為進(jìn)一步提高BIOS程序和user程序?qū)lash資源的利用率,依據(jù)緊湊劃分原則,從片外flash的零地址開(kāi)始為BIOS程序分配空間,并將BIOS程序的結(jié)束地址作為user程序的起始地址。同時(shí),為了保持各自的獨(dú)立性,防止user程序在開(kāi)始寫(xiě)入時(shí)出現(xiàn)意外擦除BIOS程序的情況,需要將BIOS程序與user程序各自的代碼分別存放在不同扇區(qū)。片外flash劃分樣例如圖2所示,1~n扇區(qū)為BIOS程序,n+1扇區(qū)及后續(xù)空間均為user程序。
DDR區(qū)主要由以下數(shù)據(jù)段組成:存放初始化不為0的全局變量或靜態(tài)變量的data段、存放未初始化或初始化為0的全局變量或靜態(tài)變量的bss段、存放臨時(shí)局部變量的heap段以及保存函數(shù)變量和參數(shù)的stack段?;谄鈌lash的劃分要點(diǎn),將DDR中的BIOS程序和user程序進(jìn)行獨(dú)立分區(qū),如圖3所示。該劃分方式的弊端表現(xiàn)為:BIOS程序運(yùn)行結(jié)束后,釋放stack段的存儲(chǔ)空間且不再使用,在一定程度上造成了DDR資源的浪費(fèi)。因此,在獨(dú)立分區(qū)的基礎(chǔ)上,保留BIOS程序和user程序的data段、bss段和heap段,將各自的stack段合并后設(shè)置為共享區(qū),如圖4所示,實(shí)現(xiàn)user程序?qū)tack段的二次使用,從而有效提高DDR存儲(chǔ)資源的利用率。
3.2 BIOS程序與user程序的銜接
BIOS程序與user程序之間的銜接由以下兩個(gè)方面組成:為確保user程序的正常運(yùn)行,需要由BIOS程序提供正確引導(dǎo);當(dāng)user程序運(yùn)行異常時(shí),需要由BIOS提供有效方法使得user程序順利回退至BIOS程序。
1)BIOS程序?qū)ser程序的正確引導(dǎo) 當(dāng)BIOS程序燒錄至MCU內(nèi)部后,通過(guò)特定標(biāo)識(shí)信息對(duì)片外flash中的user程序進(jìn)行檢測(cè),若user程序存在,則由BIOS程序提供引導(dǎo),將user程序拷貝到DDR,通過(guò)鏈接文件獲取user程序的運(yùn)行地址和代碼量,并將PC指針指向user程序的復(fù)位函數(shù),在該函數(shù)內(nèi)利用內(nèi)嵌匯編加載并跳轉(zhuǎn)至user程序的運(yùn)行地址,即可完成BIOS程序到user程序的跳轉(zhuǎn),執(zhí)行過(guò)程如圖5所示。為了避免標(biāo)識(shí)信息在熱復(fù)位后被清除,本文將該標(biāo)識(shí)信息存放于user程序bss段與data段之間的獨(dú)立范圍內(nèi),保證了BIOS程序?qū)ser程序引導(dǎo)的可靠性與通用性。
2)由user程序返回BIOS程序 通過(guò)在短時(shí)間內(nèi)對(duì)MCU進(jìn)行6次熱復(fù)位,且每次觸發(fā)間隔控制在1 s左右,即可實(shí)現(xiàn)user程序主動(dòng)返回至BIOS程序;若觸發(fā)次數(shù)不足6次,則清空已觸發(fā)次數(shù)并繼續(xù)運(yùn)行user程序,具體執(zhí)行流程如圖6所示。
由于D1-H內(nèi)部不包含識(shí)別冷復(fù)位與熱復(fù)位的控制狀態(tài)寄存器,本文利用熱復(fù)位不會(huì)導(dǎo)致存儲(chǔ)器內(nèi)容丟失的特性,取消啟動(dòng)文件中的bss段清零操作,對(duì)未初始化的全局變量進(jìn)行判斷,若初值改變,則返回冷復(fù)位標(biāo)志,反之則返回?zé)釓?fù)位標(biāo)志。
3.3 底層驅(qū)動(dòng)的駐留與調(diào)用
底層驅(qū)動(dòng)的駐留是指在BIOS程序中將底層驅(qū)動(dòng)封裝為構(gòu)件,通過(guò)應(yīng)用程序編程接口(application programming interface,API)為用戶在user程序中提供函數(shù)調(diào)用服務(wù)。本文將底層驅(qū)動(dòng)函數(shù)地址按照順序依次存放在全局指針數(shù)組ComponentFun,利用“attribute”關(guān)鍵字將該數(shù)組固定存儲(chǔ)在BIOS程序的“.component_list”數(shù)據(jù)段,并使用缺省函數(shù)reserved_func為接口函數(shù)的更新與擴(kuò)充預(yù)留空間。在user程序中,按照全局指針數(shù)組ComponentFun中的存放順序,對(duì)接口函數(shù)的函數(shù)名、返回值類型和參數(shù)類型等進(jìn)行重定義,通過(guò)全局指針數(shù)組的固定索引調(diào)用相應(yīng)函數(shù)。具體實(shí)現(xiàn)方法如下:
__attribute__((section (".component_list"))) void *
ComponentFun[MAP_SECTORSIZE/2] = {
(void*) gpio_init,
(void*) gpio_set,
(void*) reserved_func,
}
#define 函數(shù)名((接口函數(shù)聲明指針表達(dá)形式)(全局?jǐn)?shù)組[序號(hào)]))
4 RT-Thread駐留測(cè)試
RT-Thread的駐留測(cè)試工程在AHL-GEC-IDE開(kāi)發(fā)環(huán)境和基于玄鐵C906內(nèi)核的D1-H應(yīng)用處理器上進(jìn)行,首先運(yùn)行BIOS程序,將RT-Thread駐留在D1-H的外接flash中,隨后運(yùn)行user程序,并分別對(duì)線程間的事件、互斥量、信號(hào)量以及消息隊(duì)列四種同步與通信方式進(jìn)行測(cè)試。
4.1 flash和DDR的實(shí)際空間劃分情況
D1-H外接NAND Flash[12]大小為256 MB,分為131 072個(gè)扇區(qū),用于存放程序、常數(shù)以及中斷向量;外接RAM為雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器第三代DDR3[13],大小為512 MB,用于存放全局變量、靜態(tài)變量以及堆??臻g。測(cè)試工程中NAND Flash采用圖2所示劃分方式,DDR3采用圖4所示劃分方式,RT-Thread駐留在BIOS后,NAND Flash與DDR3的空間劃分如表2所示。
4.2 RT-Thread駐留后程序啟動(dòng)流程分析
當(dāng)RT-Thread駐留到BIOS后,從D1-H上電復(fù)位到RT-Thread對(duì)用戶線程進(jìn)行調(diào)度主要包含以下五個(gè)階段:?jiǎn)?dòng)內(nèi)部固化引導(dǎo)程序BROM、啟動(dòng)第二階段程序SPL、啟動(dòng)BIOS、由BIOS跳轉(zhuǎn)至user、啟動(dòng)user以及啟動(dòng)RT-Thread,其啟動(dòng)流程如圖7所示。首先,D1-H上電復(fù)位后,按照內(nèi)部機(jī)制從固化在片內(nèi)ROM處的引導(dǎo)程序BROM開(kāi)始執(zhí)行,接著啟動(dòng)SPL,通過(guò)自定義程序完成對(duì)時(shí)鐘、串口以及DDR3的初始化,在將BIOS程序復(fù)制到DDR3的空間地址0x4000_0000后,開(kāi)始BIOS的啟動(dòng),由硬件從NAND Flash的起始地址取出中斷向量表的第一個(gè)表項(xiàng),賦值給堆棧指針寄存器SP進(jìn)行初始化,程序計(jì)數(shù)器PC加載中斷向量表第二個(gè)表項(xiàng),啟動(dòng)BIOS復(fù)位向量,接著對(duì)DDR3中的各個(gè)數(shù)據(jù)段完成初始化,然后在主程序中調(diào)用user_jump跳轉(zhuǎn)至user程序。user程序的啟動(dòng)過(guò)程與BIOS程序的啟動(dòng)過(guò)程基本一致,唯一不同的是,user在主程序中調(diào)用函數(shù)rtthread_startup啟動(dòng)RT-Thread,包括對(duì)板級(jí)硬件初始化、延時(shí)阻塞列表初始化、調(diào)度器初始化、創(chuàng)建自啟動(dòng)線程和空閑線程、啟動(dòng)調(diào)度器,然后由RT-Thread完成對(duì)用戶線程的調(diào)度運(yùn)行。
4.3 駐留運(yùn)行測(cè)試
在user程序中分別對(duì)事件、互斥量、信號(hào)量和消息隊(duì)列四種線程同步與通信方式進(jìn)行功能測(cè)試。RT-Thread駐留測(cè)試工程的運(yùn)行結(jié)果如表3所示。測(cè)試結(jié)果表明,RT-Thread成功駐留于BIOS程序,并在user程序中按照啟動(dòng)流程順利實(shí)現(xiàn)了創(chuàng)建線程、啟動(dòng)線程、延時(shí)調(diào)度以及四種同步與通信等功能,驗(yàn)證了RT-Thread駐留方法的可行性。
a)事件測(cè)試工程。在串口中斷中設(shè)置紅燈事件,改變紅燈亮暗。b)互斥量測(cè)試工程。紅、綠、藍(lán)三種顏色的小燈按照紅燈5 s、綠燈10 s、藍(lán)燈20 s的順序單獨(dú)實(shí)現(xiàn)亮暗,每種顏色的小燈線程之間通過(guò)鎖定單色燈互斥量獨(dú)立占有資源。c)信號(hào)量測(cè)試工程。通過(guò)串口輸出線程申請(qǐng)、等待和釋放信號(hào)量的響應(yīng)過(guò)程。d)消息隊(duì)列測(cè)試工程。通過(guò)消息隊(duì)列實(shí)現(xiàn)線程間的消息傳遞。觸發(fā)串口接收中斷后,通過(guò)串口發(fā)送的數(shù)據(jù)幀被存放到消息隊(duì)列,消息隊(duì)列接收線程每隔1 s從消息隊(duì)列中獲取消息并通過(guò)串口打印出消息內(nèi)容和當(dāng)前消息隊(duì)列中的消息量。
5 結(jié)束語(yǔ)
為了更好地發(fā)揮RT-Thread對(duì)嵌入式軟件開(kāi)發(fā)的應(yīng)用支撐,本文在GEC架構(gòu)的設(shè)計(jì)基礎(chǔ)上,實(shí)現(xiàn)了國(guó)產(chǎn)RISC-V應(yīng)用處理器D1-H的GEC軟件框架,深入剖析了實(shí)現(xiàn)RT-Thread駐留的關(guān)鍵要素,提出了BIOS程序正向引導(dǎo)與user程序順利回退兩種機(jī)制來(lái)有效實(shí)現(xiàn)BIOS程序與user程序之間的銜接,給出了具體的存儲(chǔ)空間劃分、底層驅(qū)動(dòng)駐留與調(diào)用的實(shí)現(xiàn)方法。后續(xù)將進(jìn)一步對(duì)RT-Thread架構(gòu)中的協(xié)議棧、圖形庫(kù)以及虛擬文件系統(tǒng)等組件進(jìn)行研究,實(shí)現(xiàn)用戶程序功能的擴(kuò)展。
參考文獻(xiàn):
[1]Wang K C.Embedded real-time operating systems[M].Berlin:Springer,2017:401-475.
[2]楊靜遠(yuǎn),黃保壘,楊弋.一種分區(qū)操作系統(tǒng)兩態(tài)下錯(cuò)誤號(hào)處理策略[J].信息技術(shù)與信息化,2021(4):169-170.(Yang Jingyuan,Huang Baolei,Yang Yi.A partition operating system error number processing strategy under two states[J].Information Technology and Informatization,2021(4):169-170.)
[3]Chen Tanhong,Li Huiyong,Niu Jianwei,et al.Embedded partitioning real-time operating system based on microkernel[C]//Proc of IEEE International Conference on Computational Science and Engineering and IEEE International Conference on Embedded and Ubiquitous Computing.Piscataway,NJ:IEEE Press,2019:205-210.
[4]白曦,王俊.基于分區(qū)操作系統(tǒng)的機(jī)電軟件架構(gòu)研究與應(yīng)用[J].信息通信,2019,33(10):95-96.(Bai Xi,Wang Jun.Research and application of electromechanical software architecture based on partitioned operating system[J].Information Communication,2019,33(10):95-96.)
[5]邱祎,熊譜翔,朱天龍.嵌入式實(shí)時(shí)操作系統(tǒng):RT-Thread設(shè)計(jì)與實(shí)現(xiàn)[M].北京:機(jī)械工業(yè)出版社,2019:36-47.(Qiu Wei,Xiong Puxiang,Zhu Tianlong.Embedded real-time operating system:design and implementation of RT-Thread[M].Beijing:China Machine Press,2019:36-47.)
[6]Bansal S,Kumar D.IoT ecosystem:a survey on devices,gateways,ope-rating systems,middleware and communication[J].International Journal of Wireless Information Networks,2020,27:340-364.
[7]全志開(kāi)發(fā)者社區(qū).D1-H芯片介紹[EB/OL].(2021-04-27).https://d1.docs.aw-ol.com.(Allwinner Online Developer Community.Introduction of D1-H chip[EB/OL].(2021-04-27).https://d1.docs.aw-ol.com.)
[8]王宜懷,李躍華,徐文彬,等.嵌入式技術(shù)基礎(chǔ)與實(shí)踐 [M].6版.北京:清華大學(xué)出版社,2021:51-57.(Wang Yihuai,Li Yuehua,Xu Wenbin,et al.Embedded technology foundation and practice[M].6th ed.Beijing:Tsinghua University Press,2021:51-57.)
[9]張曉宇.實(shí)時(shí)操作系統(tǒng)內(nèi)核硬件化的研究與實(shí)現(xiàn)[D].沈陽(yáng):沈陽(yáng)工業(yè)大學(xué),2019.(Zhang Xiaoyu.Research and implementation of hardware for real-time operating system kernel[D].Shenyang:Shen-yang University of Technology,2019.)
[10]Lyu Pan,Li Hong,Qiu Jinsong,et al.Cyborgan OS:a lightweight real-time operating system for artificial organ[J].Security and Communication Networks,2020,2020:article ID 8871626.
[11]Zhang Haitao,Chen Lirong,Luo Lei.Formal modeling and verification of the sequential kernel of an embedded operating system[C]//Proc of the 18th International Computer Conference on Wavelet Active Media Technology and Information Processing.Piscataway,NJ:IEEE Press,2021:553-569.
[12]李中,周加誼,曹睿.基于NAND Flash固態(tài)硬盤(pán)的壞塊管理方法 [J].電子設(shè)計(jì)工程,2022,30(23):24-27,32.(Li Zhong,Zhou Jiayi,Cao Rui.Bad block management method based on NAND Flash solid state drive[J].Electronic Design Engineering,2022,30(23):24-27,32.)
[13]黃姣英,趙如豪,王琪,等.基于FPGA的DDR3 SDRAM控制器設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2022,45(22):68-74.(Huang Jiaoying,Zhao Ruhao,Wang Qi,et al.Design of DDR3 SDRAM controller based on FPGA[J].Modern Electronic Technology,2022,45(22):68-74.)