崔振禮,羅 宇
(國(guó)防科技大學(xué)計(jì)算機(jī)學(xué)院,湖南 長(zhǎng)沙 410073)
隨著大規(guī)模集成電路的發(fā)展,嵌入式設(shè)備的性能越來(lái)越強(qiáng),功能越來(lái)越豐富,應(yīng)用場(chǎng)景也越來(lái)越復(fù)雜,在以智能制造和物聯(lián)網(wǎng)為主題的“工業(yè)4.0”概念被提出后,各應(yīng)用領(lǐng)域?qū)η度胧讲僮飨到y(tǒng)的要求也越來(lái)越高。復(fù)雜的應(yīng)用場(chǎng)景要求嵌入式操作系統(tǒng)在具有豐富功能性的同時(shí)支持實(shí)時(shí)性,但是在單操作系統(tǒng)中,豐富的功能性會(huì)不可避免地導(dǎo)致較多的運(yùn)行任務(wù)和復(fù)雜的調(diào)度算法,難以達(dá)到實(shí)時(shí)性要求,而為了保證實(shí)時(shí)性,系統(tǒng)通常會(huì)最小化任務(wù)數(shù)量,盡量減少一些不必要的功能,所以單操作系統(tǒng)難以同時(shí)兼具兩者[1]。雙操作系統(tǒng)架構(gòu)正好可以滿足這一要求。在雙操作系統(tǒng)架構(gòu)中,通用操作系統(tǒng)GPOS(General-Purpose Operating System)和實(shí)時(shí)操作系統(tǒng)RTOS(Real-Time Operating System)部署在同一嵌入式平臺(tái),其中GPOS 提供復(fù)雜任務(wù)開發(fā)功能,滿足系統(tǒng)的功能需求,RTOS 提供精確的實(shí)時(shí)控制功能,滿足系統(tǒng)的實(shí)時(shí)性需求[2]。
由于雙操作系統(tǒng)運(yùn)行于同一硬件平臺(tái),如何合理地配置有限的外設(shè)資源是雙操作系統(tǒng)架構(gòu)面臨的重要問(wèn)題。通過(guò)虛擬化技術(shù),雙操作系統(tǒng)可以實(shí)現(xiàn)外設(shè)資源共享,但是虛擬化軟件層會(huì)帶來(lái)額外的性能開銷,對(duì)于嵌入式設(shè)備來(lái)說(shuō),這種開銷是不容忽視的。而在非虛擬化條件下,操作系統(tǒng)實(shí)例互相隔離,獨(dú)占私有的外設(shè)資源,既可以充分發(fā)揮性能,又可以提升信息安全性[3]。華為海思Hi3559AV100 SOC的雙操作系統(tǒng)架構(gòu)采用非虛擬化方式,系統(tǒng)分別運(yùn)行于不同的CPU,外設(shè)資源按照功能需求分成2部分由雙操作系統(tǒng)分別單獨(dú)占有,不能共享使用。采用上述方式時(shí),外設(shè)資源配置方案在操作系統(tǒng)源代碼中被靜態(tài)指定,系統(tǒng)部署之后便無(wú)法調(diào)整。搭載了該雙操作系統(tǒng)架構(gòu)的嵌入式設(shè)備在運(yùn)行時(shí),如果某端系統(tǒng)發(fā)生了故障,其上運(yùn)行的與外設(shè)交互的任務(wù)便無(wú)法繼續(xù),從而影響到整個(gè)系統(tǒng)的正常運(yùn)行,輕則造成設(shè)備功能失效、失控或損壞,重則影響用戶的健康安全。
本文基于上述問(wèn)題提出一種外設(shè)資源在雙操作系統(tǒng)運(yùn)行期間動(dòng)態(tài)遷移的解決方案。在某端系統(tǒng)出現(xiàn)故障之后,把配置到該端的外設(shè)資源遷移到另一端系統(tǒng),啟動(dòng)相應(yīng)的用戶處理程序,控制外設(shè)繼續(xù)工作,最大限度地保證用戶和設(shè)備的安全,避免損失。最后在EVM3559A嵌入式開發(fā)平臺(tái)上對(duì)所提方案的可行性和可靠性進(jìn)行實(shí)驗(yàn)驗(yàn)證。
Hi3559AV100是華為海思面向智能網(wǎng)絡(luò)監(jiān)控?cái)z像頭、3D/VR攝像頭、視頻會(huì)議終端、智能工業(yè)機(jī)器人、智能無(wú)人機(jī)、實(shí)時(shí)護(hù)理系統(tǒng)終端等領(lǐng)域設(shè)計(jì)的專業(yè)8K ultra HD mobile camera SOC,它提供了8K30/4K120廣播級(jí)圖像質(zhì)量的數(shù)字視頻錄制,支持4K sensor輸入,H.265編碼輸出或影視級(jí)的raw數(shù)據(jù)輸出,多路全景硬件拼接,并集成了高性能圖像信號(hào)處理器ISP(Image Signal Processor),為用戶提供了卓越的圖像處理能力;提供高效且豐富的計(jì)算資源,集成了1個(gè)由雙核A53和雙核A73組成的四核CPU、1個(gè)單核A53、1個(gè)M7、1個(gè)GPU、1個(gè)四核數(shù)字信號(hào)處理器DSP(Digital Signal Processor)和2個(gè)神經(jīng)網(wǎng)絡(luò)推理引擎NNIE(Neural Network Inference Engine),可根據(jù)應(yīng)用場(chǎng)景制定合適的業(yè)務(wù)部署方案;采用先進(jìn)的12 nm低功耗工藝和小型化封裝,在縮小產(chǎn)品體積的同時(shí)減少功耗[4];支持單操作系統(tǒng)和多操作系統(tǒng)(最多4個(gè))部署方案,以滿足不同的業(yè)務(wù)需求。
Hi3559AV100提供Linux+LiteOS的雙操作系統(tǒng)部署方案,Linux作為GPOS運(yùn)行非實(shí)時(shí)任務(wù),部署在雙核A53和雙核A73組成的四核CPU上,LiteOS作為RTOS運(yùn)行實(shí)時(shí)任務(wù),部署在單核A53上,雙操作系統(tǒng)之間共享內(nèi)存,并通過(guò)共用系統(tǒng)總線訪問(wèn)外設(shè)資源。Linux作為主流嵌入式通用操作系統(tǒng),其使用廣泛,性能高效,運(yùn)行穩(wěn)定,功能強(qiáng)大,對(duì)硬件平臺(tái)適配性好,對(duì)外圍設(shè)備兼容性強(qiáng),由于其開源特性,可根據(jù)具體需求進(jìn)行裁剪,還可根據(jù)特殊需求實(shí)現(xiàn)定制化。LiteOS是華為針對(duì)物聯(lián)網(wǎng)領(lǐng)域推出的輕量級(jí)物聯(lián)網(wǎng)實(shí)時(shí)操作系統(tǒng),具備輕量級(jí)(最小內(nèi)核尺寸僅為6 KB)、高實(shí)時(shí)、高穩(wěn)定性、低功耗、互聯(lián)互通、組件豐富和快速開發(fā)等關(guān)鍵能力[5]。Hi3559AV100雙操作系統(tǒng)架構(gòu)如圖1所示。
Figure 1 Hi3559AV100 dual operating systems architecture圖1 Hi3559AV100雙操作系統(tǒng)架構(gòu)
外設(shè)資源動(dòng)態(tài)遷移的實(shí)現(xiàn)基于外設(shè)中斷與CPU核的動(dòng)態(tài)綁定,即改變外設(shè)中斷的響應(yīng)CPU,由該CPU上部署的操作系統(tǒng)進(jìn)行處理。
在Hi3559AV100中,外設(shè)的中斷由通用中斷控制器GIC(Generic Interrupt Controller)負(fù)責(zé)管理,GIC是聯(lián)系外設(shè)中斷和CPU的橋梁,也是各CPU之間中斷互聯(lián)的通道。GIC共支持3種中斷類型[6]:
(1)軟中斷SGI(Software-Generated Interrupt):SGI為軟件可以觸發(fā)的中斷,統(tǒng)一編號(hào)為0~15,用于各個(gè)CPU核之間的通信;
(2)私有外設(shè)中斷PPI(Private Peripheral Interrupt):PPI為每個(gè)CPU核的私有外設(shè)中斷,統(tǒng)一編號(hào)為 16~31。例如,每個(gè)CPU核的Local Timer產(chǎn)生的中斷就是通過(guò) PPI 發(fā)送給CPU核的;
(3)外設(shè)中斷SPI(Shared Peripheral Interrupt):SPI 是外部設(shè)備產(chǎn)生的中斷,所有CPU核共用,統(tǒng)一編號(hào)為32~1 019,如Global Timer、UART和GPIO產(chǎn)生的中斷。
由于本文研究?jī)?nèi)容只與SPI相關(guān),所以忽略SGI和PPI。Hi3559AV100使用的是GIC-400,最多支持8個(gè)CPU接口,其與外設(shè)、CPU連接情況如圖2所示。
Figure 2 GIC connection with peripherals and CPU圖2 GIC與外設(shè)、CPU的連接
由圖2可知,CPU核與GIC之間有2條連接線,分別是快速中斷請(qǐng)求線FIQ(Fast Interrupt Request)與中斷請(qǐng)求線IRQ(Interrupt ReQuest),F(xiàn)IQ用于安全模式,IRQ用于非安全模式[6]。當(dāng)外設(shè)中斷發(fā)送至GIC時(shí),GIC會(huì)把收集來(lái)的中斷緩存,然后從中選擇優(yōu)先級(jí)最高的中斷請(qǐng)求發(fā)送至該外設(shè)中斷綁定的CPU,CPU接收到外設(shè)中斷信號(hào)后,讀GIC相應(yīng)的寄存器得到中斷號(hào),然后開始處理中斷。
GIC內(nèi)部由2個(gè)部件組成:分發(fā)器(Distribut- or)和 CPU 接口(CPU Interface)。
分發(fā)器的主要作用是檢測(cè)各個(gè)中斷源的狀態(tài),控制各個(gè)中斷源的行為,分發(fā)各個(gè)中斷源產(chǎn)生的中斷事件到設(shè)定的CPU接口上。雖然分發(fā)器可以管理多個(gè)中斷源,但是它總是把優(yōu)先級(jí)最高的中斷請(qǐng)求送往CPU接口。分發(fā)器對(duì)中斷的控制包括[6]:
(1)中斷使能或禁用控制。分發(fā)器對(duì)中斷的控制分成2個(gè)級(jí)別,一個(gè)級(jí)別是對(duì)全局中斷的控制,一旦禁能了全局中斷,那么任何中斷源產(chǎn)生的中斷事件都不會(huì)被傳遞到CPU接口;另外一個(gè)級(jí)別是針對(duì)各個(gè)中斷源進(jìn)行控制,禁用某一個(gè)中斷源會(huì)導(dǎo)致該中斷事件不會(huì)分發(fā)到CPU接口,但不影響其他中斷源產(chǎn)生的中斷事件的分發(fā)。
(2)將當(dāng)前優(yōu)先級(jí)最高的中斷事件分發(fā)到預(yù)先綁定的CPU接口。
(3)優(yōu)先級(jí)控制。
(4)中斷屬性設(shè)定,例如是電平觸發(fā)還是邊沿觸發(fā)。
CPU接口是GIC與CPU核之間的連接接口,它的主要作用有[6]:
(1)使能或者禁能CPU接口向連接的CPU核提交中斷事件。
(2)應(yīng)答中斷,改變中斷的狀態(tài)。CPU核會(huì)向CPU接口應(yīng)答中斷,中斷一旦被應(yīng)答,分發(fā)器就會(huì)把該中斷的狀態(tài)從等待狀態(tài)修改成活躍狀態(tài)。
(3)接收中斷處理完畢的通知。
(4)設(shè)定優(yōu)先級(jí)掩碼。通過(guò)優(yōu)先級(jí)掩碼可以屏蔽掉一些優(yōu)先級(jí)比較低的中斷,這些中斷不會(huì)通知到CPU核。
(5)設(shè)定中斷搶占的策略。
(6)在多個(gè)中斷事件同時(shí)到來(lái)的時(shí)候,選擇一個(gè)優(yōu)先級(jí)最高的中斷發(fā)送到CPU接口。
由分發(fā)器和CPU接口的功能可知,中斷分發(fā)到哪個(gè)CPU是分發(fā)器根據(jù)預(yù)先綁定的CPU接口決定的,而外設(shè)中斷與CPU接口的綁定是通過(guò)向GIC分發(fā)器部件的中斷分發(fā)目的寄存器GICD_ITARGETSRn寫CPU接口掩碼實(shí)現(xiàn)的[6]。在分發(fā)器分發(fā)中斷事件時(shí),首先根據(jù)GICD_ITARGETSRn寄存器找到該中斷綁定的CPU接口掩碼,然后根據(jù)掩碼把中斷分發(fā)到相應(yīng)的接口。GIC分發(fā)器的初始化是在LiteOS啟動(dòng)過(guò)程中完成的,其初始化代碼[7]如下所示:
#define WRITE_UINT32(Val,Addr)(*((volatile UINT32 *)((UINT32)(Addr)))=(Val))
void platform_gic_dist_init(void *base,UINT32irq_start){
…
//256 interrupts at most
UINT32max_irq=256;
/*irq_map:An array filled with CPU mask,indicates which CPU the IRQ is sent to*/
UINT32 *irq_dist=(UINT32 *)irq_map;
…
//write CPU mask to GIC related register
for(i=32;i WRITE_UINT32(*irq_dist,base+ARM_GIC_DIST_TARGET+i); irq_dist++; } } 由代碼可以看出,GIC設(shè)置為最多支持256個(gè)中斷;irq_map定義為數(shù)組,數(shù)組元素為外設(shè)中斷綁定的CPU接口的掩碼(8 bit,無(wú)符號(hào)字符類型),數(shù)組元素的序號(hào)與某個(gè)外設(shè)中斷一一對(duì)應(yīng),例如數(shù)組序號(hào)8對(duì)應(yīng)UART2的中斷,irq_map[8]的值表示UART2的中斷綁定的CPU接口的掩碼;從偏移量32開始(0~15為軟中斷,16~31為私有外設(shè)中斷),外設(shè)中斷綁定的CPU接口的掩碼被寫到了GIC分發(fā)器部件的GICD_ITARGETSRn寄存器(地址為base+ARM_GIC_DIST_TARGET)中,且一次循環(huán)寫4個(gè)掩碼值。 CPU接口的掩碼及其與CPU核的連接關(guān)系如表1所示。 Table 1 Mask of the CPU interface and its connection to the CPU core irq_map數(shù)組[7]定義如下所示: #define TO_A53MP0 1<<0x00 #define TO_A53MP1 1<<0x01 #define TO_A73MP0 1<<0x02 #define TO_A73MP1 1<<0x03 #define TO_A53UP_ 1<<0x04 const UCHARirq_map[256-32]={ … /*UART0,UART1,UART2*/ TO_A53MP0,TO_A53UP_,TO_A53MP0, /*SPI0*/ TO_A53MP0 … } 在源代碼中先為CPU核掩碼作宏定義。由于Linux運(yùn)行在雙核A53和雙核A73組成的四核CPU上,LiteOS運(yùn)行在單核A53上,所以當(dāng)irq_map數(shù)組元素值為TO_A53MP0、TO_A53MP1、TO_A53MP2或者TO_A53MP3時(shí)表示對(duì)應(yīng)的中斷由Linux負(fù)責(zé)處理,數(shù)組元素為TO_A53UP_時(shí)表示對(duì)應(yīng)的中斷由LiteOS負(fù)責(zé)處理。 由GIC的工作原理可知,如果外設(shè)中斷在系統(tǒng)運(yùn)行期間可以動(dòng)態(tài)綁定到不同的CPU接口,就可以改變接收該中斷CPU核,從而實(shí)現(xiàn)外設(shè)資源在系統(tǒng)間動(dòng)態(tài)遷移的目的。而外設(shè)中斷與CPU接口的綁定關(guān)系是由GIC分發(fā)器的GICD_ITARGETSRn寄存器中存放的CPU接口掩碼確定的[8],所以可以通過(guò)修改此寄存器中相應(yīng)地址的值來(lái)改變外設(shè)中斷綁定的CPU接口。 以外設(shè)UART2為例,把外設(shè)資源動(dòng)態(tài)遷移實(shí)現(xiàn)思路分為3步: Step1確定GIC中GICD_ITARGETSRn寄存器的地址; Step2根據(jù)UART2中斷在irq_map數(shù)組中對(duì)應(yīng)的序號(hào)和Step 1中找到的地址,確定存放UART2中斷綁定的CPU接口的掩碼地址; Step3把Step 2確定的地址中的值修改為要綁定的CPU接口的掩碼。 由于LiteOS未使用虛擬地址機(jī)制,所以可通過(guò)物理地址直接訪問(wèn)GICD_ITARGETSRn寄存器的內(nèi)容。通過(guò)閱讀LiteOS系統(tǒng)源碼得到系統(tǒng)基地址為0x1F101000,GICD_ITARGETSRn地址偏移量為0x800,所以Step 1中GICD_ITARGETSRn寄存器的地址為0x1F101800。由于UART2中斷在irq_map數(shù)組中對(duì)應(yīng)的序號(hào)為8,所以存放UART2中斷綁定的CPU接口的掩碼地址為0x1F101800+32+8,此地址處的默認(rèn)值為0x10,即CPU接口4的掩碼,然后將該地址處的值修改為雙核A53或者雙核A73的核所連接的CPU接口的掩碼,即可實(shí)現(xiàn)UART2從LiteOS到Linux的動(dòng)態(tài)遷移。LiteOS應(yīng)用程序中實(shí)現(xiàn)該功能的代碼如下(以遷移到雙核A53 的核0為例)所示: #define BASE 0x1F101000 #define GICD_ITARGETSRn 0x800 #define WRITE_UCHAR(Val,Addr) (*((volatile UCHAR*)((UINT32)(Addr)))=(Val)) static voiduart2_tomp(){ … WRITE_UCHAR(BASE+ GICD_ITARGETSRn+40,TO_A53MP0); … } Linux使用了虛擬地址機(jī)制,所以在Linux中訪問(wèn)寄存器要先把它的物理地址轉(zhuǎn)換成相應(yīng)的虛擬地址。Linux提供了物理內(nèi)存的鏡像設(shè)備文件/dev/mem,用于訪問(wèn)物理內(nèi)存,由于ARM架構(gòu)采用I/O端口與物理內(nèi)存統(tǒng)一編址方式,所以可以通過(guò)訪問(wèn)內(nèi)存地址的方式訪問(wèn)I/O設(shè)備。Linux應(yīng)用程序中實(shí)現(xiàn)該功能的代碼如下所示: #define BASE 0x1F101000 #define GICD_ITARGETSRn 0x800 static voiduart2_tomp(){ … intfd=open(“/dev/mem”,O_RDWR|O_SYNC); void *virt_base=mmap(NULL,1000, PROT_READ|PROT_WRITE,MAP_SHARED,fd,BASE); *((UCHAR*)( BASE+GICD_ITARGETSRn+40))=TO_A53MP0; … } 本文通過(guò)實(shí)驗(yàn)驗(yàn)證本文所提方案是否可行,遷移過(guò)程是否可靠。實(shí)驗(yàn)采用的硬件平臺(tái)是廣州英碼信息科技有限公司生產(chǎn)的搭載了Hi3559AV100 SOC的EVM3559A嵌入式開發(fā)板,該開發(fā)板主要硬件配置信息如表2所示。 Table 2 Main hardware configuration information on EVM3559A 測(cè)試程序分2部分,分別運(yùn)行于LiteOS和Linux中,模擬單核A53故障或者LiteOS 宕機(jī)導(dǎo)致其上運(yùn)行的任務(wù)無(wú)法繼續(xù)執(zhí)行時(shí),外設(shè)資源動(dòng)態(tài)遷移到Linux中。通過(guò)HeartBeat原理[9]實(shí)現(xiàn)Linux對(duì)LiteOS的故障檢測(cè),當(dāng)Linux端測(cè)試程序在指定時(shí)間內(nèi)未收到LiteOS端測(cè)試程序定時(shí)通過(guò)處理器間通信IPCM(Internal Processor Communication Message)發(fā)送的心跳信息時(shí),便認(rèn)為L(zhǎng)iteOS發(fā)生了故障,啟動(dòng)外設(shè)資源遷移程序及相應(yīng)的用戶處理程序,進(jìn)行非實(shí)時(shí)降級(jí)處理,繼續(xù)控制外設(shè)運(yùn)行。 在本實(shí)驗(yàn)中以外設(shè)UART2為測(cè)試設(shè)備。LiteOS端測(cè)試程序每隔1 s向Linux發(fā)送心跳信息,在程序運(yùn)行20 s后停止發(fā)送,Linux端測(cè)試程序等待心跳信息超時(shí)時(shí)間設(shè)置為2 s。為了方便觀察實(shí)驗(yàn)結(jié)果,兩端測(cè)試程序在接收到UART2數(shù)據(jù)后輸出至調(diào)試窗口。測(cè)試程序總體流程如圖3所示。 Figure 3 Overall flow chart of the test program圖3 測(cè)試程序總體流程 在2臺(tái)電腦上分別安裝USB轉(zhuǎn)串口驅(qū)動(dòng),其中1臺(tái)作為測(cè)試電腦,安裝由C#編寫的串口數(shù)據(jù)發(fā)送程序,該程序每隔1 s向串口發(fā)送“‘This is a test statement numbered’+消息序號(hào)”的測(cè)試數(shù)據(jù),其中消息序號(hào)從0開始,依次遞增1,另一臺(tái)作為調(diào)試電腦,安裝串口調(diào)試工具。測(cè)試電腦通過(guò)USB轉(zhuǎn)串口線連接到EVM3559A的UART2接口,調(diào)試電腦通過(guò)USB線連接至EVM3559A的micro USB調(diào)試串口。實(shí)驗(yàn)環(huán)境連接情況如圖4所示。 Figure 4 Connection of experimental environment圖4 實(shí)驗(yàn)環(huán)境連接情況 測(cè)試程序均部署為開機(jī)自啟,后臺(tái)運(yùn)行。EVM3559A上電后,雙操作系統(tǒng)啟動(dòng),測(cè)試程序自動(dòng)運(yùn)行,UART2中斷默認(rèn)由LiteOS負(fù)責(zé)處理。 此時(shí)LiteOS端測(cè)試程序等待接收UART2數(shù)據(jù),并定期向Linux發(fā)送心跳消息。打開測(cè)試電腦上的串口數(shù)據(jù)發(fā)送程序,開始發(fā)送測(cè)試數(shù)據(jù),程序運(yùn)行情況如圖5所示。 Figure 5 Running of the serial data sending program圖5 串口數(shù)據(jù)發(fā)送程序運(yùn)行情況 LiteOS端測(cè)試程序開始接收到UART2數(shù)據(jù),并把數(shù)據(jù)打印輸出至調(diào)試窗口,接收情況如圖6所示。 Figure 6 Test program receiving UART2 data in LiteOS 圖6 LiteOS端測(cè)試程序接收UART2數(shù)據(jù) LiteOS端測(cè)試程序運(yùn)行20 s之后,停止發(fā)送心跳信息,2 s后Linux端測(cè)試程序等待接收心跳信息超時(shí),啟動(dòng)UART2遷移程序,開始接收UART2串口數(shù)據(jù),并打印輸出至調(diào)試窗口。接收情況如圖7所示。 Figure 7 Test program receiving UART2 data in Linux 圖7 Linux端測(cè)試程序接收UART2數(shù)據(jù) 由運(yùn)行結(jié)果可知,Linux端測(cè)試程序可以接收到UART2數(shù)據(jù),實(shí)現(xiàn)了UART2在雙操作系統(tǒng)運(yùn)行期間的動(dòng)態(tài)遷移,滿足可行性要求。此外,通過(guò)改變串口數(shù)據(jù)傳輸參數(shù)和傳輸頻率進(jìn)行了多次實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明,在遷移前后,2端測(cè)試程序接收到的串口測(cè)試數(shù)據(jù)的序號(hào)是連續(xù)的,未發(fā)生數(shù)據(jù)丟失,具有高可靠性。 雙操作系統(tǒng)架構(gòu)是嵌入式系統(tǒng)的發(fā)展趨勢(shì),如何在系統(tǒng)間配置外設(shè)資源是該架構(gòu)面臨的重要問(wèn)題。本文基于華為海思Hi3559AV100 SOC雙操作系統(tǒng)架構(gòu),研究其外設(shè)資源在系統(tǒng)間的配置原理,分析此種外設(shè)配置方式在應(yīng)用中存在的問(wèn)題,提出一種利用外設(shè)中斷動(dòng)態(tài)綁定CPU核的方式來(lái)實(shí)現(xiàn)外設(shè)資源在系統(tǒng)運(yùn)行期間動(dòng)態(tài)遷移的解決方案,并利用EVM3559A嵌入式開發(fā)平臺(tái)對(duì)該方案的可行性和可靠性進(jìn)行了實(shí)驗(yàn)驗(yàn)證。 此外,該解決方案還可應(yīng)用于外設(shè)資源的靈活部署、節(jié)能省耗、負(fù)載動(dòng)態(tài)平衡等場(chǎng)景。3.3 具體實(shí)現(xiàn)
4 實(shí)驗(yàn)驗(yàn)證
4.1 測(cè)試程序設(shè)計(jì)
4.2 實(shí)驗(yàn)環(huán)境搭建
4.3 實(shí)驗(yàn)過(guò)程及結(jié)果
5 結(jié)束語(yǔ)