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

        ?

        基于Keil C51的嵌入式軟件外設(shè)虛擬化設(shè)計(jì)與實(shí)現(xiàn)

        2023-04-26 08:21:36宋雷軍魏冬冬于清華
        關(guān)鍵詞:指令

        申 臻,宋雷軍,魏冬冬,于清華,劉 濤

        (上海航天電子技術(shù)研究所,上海 201109)

        0 引言

        8051單片機(jī)已在航空航天控制領(lǐng)域廣泛應(yīng)用,需要測(cè)評(píng)的嵌入式軟件數(shù)量逐年增多。軟件測(cè)試又是保障軟件安全、正確、完整的關(guān)鍵環(huán)節(jié)[1]。測(cè)試人員使用被測(cè)件的硬件平臺(tái)完成測(cè)試,通常會(huì)面臨兩個(gè)問題:1)重大科研或者重要型號(hào)項(xiàng)目的物理環(huán)境,難以為測(cè)試工作提供足夠的使用時(shí)間[2];2)不能執(zhí)行可能引起物理環(huán)境破壞的異常測(cè)試,測(cè)試的覆蓋性得不到保證[3]。面對(duì)只有軟件源代碼,實(shí)物測(cè)試環(huán)境不具備、故障測(cè)試用例無(wú)法執(zhí)行的測(cè)評(píng)任務(wù),如何提供有效測(cè)試環(huán)境成為軟件測(cè)評(píng)單位的難題。

        編譯軟件Keil C51(美國(guó)Keil Software公司開發(fā))為51系列單片機(jī)程序[4]提供開發(fā)調(diào)試環(huán)境,涵蓋編輯、編譯、連接、調(diào)試、仿真等整個(gè)開發(fā)流程。在測(cè)試中,通過(guò)Keil編譯被測(cè)試的嵌入式軟件(以下簡(jiǎn)稱為“被測(cè)件”)代碼,并提供被測(cè)件運(yùn)行的仿真環(huán)境?;贙eil提供的高級(jí)仿真接口(AGSI,advanced generic simulator interface)[5]自研全數(shù)字測(cè)試平臺(tái)(以下簡(jiǎn)稱“測(cè)試平臺(tái)”)模擬芯片指令[6],實(shí)現(xiàn)被測(cè)件的仿真運(yùn)行、外圍激勵(lì)注入、外設(shè)硬件接口模擬、覆蓋率統(tǒng)計(jì)等。

        基于以上背景,Keil C51為被測(cè)件提供運(yùn)行環(huán)境;測(cè)試平臺(tái)提供虛擬化接口、外圍激勵(lì)環(huán)境[7],實(shí)現(xiàn)測(cè)試用例執(zhí)行、故障注入、邊界測(cè)試以及測(cè)試結(jié)果的觀察。測(cè)試平臺(tái)與Keil之間通過(guò)用戶數(shù)據(jù)報(bào)協(xié)議(UDP,user datagram protocol)完成數(shù)據(jù)交互[8]。

        本文基于Keil C51及測(cè)試平臺(tái),完成被測(cè)件外設(shè)的虛擬化,生成可在測(cè)試平臺(tái)上運(yùn)行的可復(fù)用模塊。虛擬化外設(shè)包括:1553B總線、模數(shù)轉(zhuǎn)換 (AD,analog digital)采集、輸入/輸出(I/O,input/output)數(shù)據(jù)、RS422總線。測(cè)評(píng)人員通過(guò)測(cè)試平臺(tái)選擇被測(cè)件運(yùn)行所需的虛擬化外設(shè)模塊,構(gòu)建全數(shù)字測(cè)試環(huán)境,實(shí)現(xiàn)被測(cè)件運(yùn)行過(guò)程的可控,內(nèi)存、寄存器信息的可改。最后,以開發(fā)某電源下位機(jī)測(cè)試平臺(tái)為例,完成故障注入、測(cè)試用例執(zhí)行、測(cè)試結(jié)果觀測(cè),驗(yàn)證虛擬化外設(shè)在嵌入式軟件測(cè)試過(guò)程中的有效性和可靠性。

        1 系統(tǒng)結(jié)構(gòu)及原理

        嵌入式軟件測(cè)試需要具備兩個(gè)條件:1)嵌入式軟件的運(yùn)行環(huán)境[9];2)測(cè)試激勵(lì)注入及嵌入式軟件輸出數(shù)據(jù)的解析與顯示[10]。虛擬化的外設(shè)、通訊中間件、Keil,三者關(guān)系結(jié)構(gòu)如圖1所示。測(cè)試平臺(tái)的上位機(jī)部分,完成測(cè)試激勵(lì)注入以及接收、解析、顯示嵌入式軟件輸出的數(shù)據(jù);測(cè)試平臺(tái)的下位機(jī)部分,基于AGSI實(shí)現(xiàn)嵌入式軟件運(yùn)行時(shí)內(nèi)存、寄存器讀寫監(jiān)控、數(shù)據(jù)同步、觸發(fā)中斷、UDP通信等;Keil C51的uVision版本提供Windows下的集成開發(fā)環(huán)境(IDE,integrated development environment),實(shí)現(xiàn)嵌入式軟件的編譯、調(diào)試、運(yùn)行[11-13]。本文重點(diǎn)介紹1553B虛擬化、AD采集虛擬化、RS422虛擬化、I/O虛擬化。

        圖1 測(cè)試平臺(tái)架構(gòu)

        嵌入式軟件運(yùn)行過(guò)程會(huì)響應(yīng)不同中斷源,CPU檢測(cè)到中斷請(qǐng)求,執(zhí)行中斷服務(wù)程序做相應(yīng)的處理。測(cè)試平臺(tái)根據(jù)不同中斷源,更改對(duì)應(yīng)寄存器地址中的值,Keil內(nèi)核監(jiān)測(cè)到特殊寄存器值更改時(shí)觸發(fā)中斷,嵌入式軟件進(jìn)入中斷服務(wù)程序。其中特殊寄存器包括:串行口控制寄存器(SCON,serial control)、中斷開發(fā)/禁止(IE,interrupt enable)、P0口、P1口、P2口、P3口(8bit分別代表不同的中斷源,如P3.2為外部中斷INT0,P3.3為外部中斷INT1)等。對(duì)于中斷方式為電平觸發(fā)、邊沿觸發(fā),測(cè)試平臺(tái)可向P3口對(duì)應(yīng)bit位寫入高電平、低電平、上升沿、下降沿,實(shí)現(xiàn)中斷的觸發(fā)。

        測(cè)試平臺(tái)實(shí)現(xiàn)對(duì)被測(cè)件內(nèi)存、寄存器的讀寫仿真,模擬總線1553B、AD、RS422、I/O接口等外設(shè)與被測(cè)件交互數(shù)據(jù)的過(guò)程。仿真過(guò)程如下:

        1)上位機(jī)監(jiān)控被測(cè)件需要向外設(shè)寫數(shù)據(jù)的全部地址。當(dāng)Keil軟核識(shí)別到被測(cè)件運(yùn)行至向外設(shè)輸出數(shù)據(jù)處(即被測(cè)件寫地址操作),虛擬軟核觸發(fā)下位機(jī)中的寫回調(diào)函數(shù),通知下位機(jī)此時(shí)被測(cè)件向哪個(gè)地址寫入何值。下位機(jī)將收到的地址值及數(shù)據(jù),通過(guò)UDP發(fā)送給上位機(jī)程序,上位機(jī)收到地址及數(shù)據(jù)完成數(shù)據(jù)解析與界面顯示等后續(xù)處理。實(shí)現(xiàn)嵌入式軟件內(nèi)存、寄存器寫地址動(dòng)作的仿真。

        2)上位機(jī)監(jiān)控被測(cè)件需要從外設(shè)讀數(shù)據(jù)的全部地址。當(dāng)Keil軟核識(shí)別到被測(cè)件運(yùn)行至從外設(shè)讀取數(shù)據(jù)處(即被測(cè)件讀地址操作),虛擬軟核觸發(fā)下位機(jī)中的讀回調(diào)函數(shù),通知下位機(jī)當(dāng)前被測(cè)件讀取的地址值。下位機(jī)將收到的地址值,通過(guò)UDP發(fā)送給上位機(jī)程序。上位機(jī)將虛擬外設(shè)向該地址寫入的模擬數(shù)據(jù),通過(guò)UDP發(fā)送給下位機(jī)通訊接口,使得被測(cè)件采集到上位機(jī)寫入的數(shù)據(jù)。實(shí)現(xiàn)嵌入式軟件內(nèi)存、寄存器讀地址動(dòng)作的仿真。

        2 外設(shè)虛擬化設(shè)計(jì)與實(shí)現(xiàn)

        測(cè)試平臺(tái)的上位機(jī)部分主要包括上位機(jī)界面和虛擬外設(shè)。上位機(jī)界面分為輸入數(shù)據(jù)、輸出數(shù)據(jù)兩大部分:1)輸入數(shù)據(jù)部分,測(cè)試人員根據(jù)測(cè)試需求設(shè)置仿真數(shù)據(jù),通過(guò)虛擬外設(shè)將仿真數(shù)據(jù)發(fā)送給被測(cè)件。測(cè)試人員可設(shè)置不同的測(cè)試數(shù)據(jù),完成被測(cè)件的邊界測(cè)試、故障測(cè)試,保障測(cè)試充分性;2)輸出數(shù)據(jù)部分,實(shí)時(shí)顯示被測(cè)件運(yùn)行過(guò)程中輸出數(shù)據(jù)的解析及狀態(tài)顯示,供測(cè)試人員分析測(cè)試結(jié)果。

        虛擬外設(shè)將測(cè)試人員在上位機(jī)界面設(shè)置的仿真數(shù)據(jù),轉(zhuǎn)換為滿足外設(shè)特定格式的數(shù)據(jù)幀,將轉(zhuǎn)換后的數(shù)據(jù)幀發(fā)送給被測(cè)件,實(shí)現(xiàn)測(cè)試激勵(lì)的注入。同時(shí),虛擬外設(shè)接收被測(cè)件運(yùn)行過(guò)程中輸出的數(shù)據(jù),轉(zhuǎn)交給上位機(jī)界面,完成數(shù)據(jù)的解析、顯示、存儲(chǔ)等處理。

        其中,虛擬外設(shè)的設(shè)計(jì)與實(shí)現(xiàn)主要包括:總線1553B虛擬化、AD采集虛擬化、總線RS422虛擬化、被測(cè)件I/O接收虛擬化。

        2.1 總線1553B虛擬化設(shè)計(jì)與實(shí)現(xiàn)

        開展總線1553B虛擬化工作之前,需要研究1553B總線的物理實(shí)現(xiàn)邏輯,分析開發(fā)測(cè)試平臺(tái)需要仿真1553B總線的方法及內(nèi)容。本小節(jié)首先介紹測(cè)試平臺(tái)所關(guān)注的1553B總線簡(jiǎn)介、1553B物理實(shí)現(xiàn)邏輯。其次,根據(jù)總線1553B物理實(shí)現(xiàn)邏輯的研究,設(shè)計(jì)并實(shí)現(xiàn)1553B中總線控制器(BC,bus controller)、遠(yuǎn)程終端(RT,remote terminal)的仿真。

        2.1.1 1553B總線簡(jiǎn)介

        1553B出自美軍標(biāo)準(zhǔn)MIL-TD-1553B,原為美軍航空電子綜合通信的標(biāo)準(zhǔn),全稱為“飛機(jī)內(nèi)部時(shí)分制指令響應(yīng)式多路傳輸數(shù)據(jù)總線”[14]。1553B為基于消息(Message)的通信協(xié)議,每條消息的最大信息量32字,分為命令字、數(shù)據(jù)字、狀態(tài)字,每類字長(zhǎng)20 bit(有效數(shù)據(jù)16 bit),每個(gè)字的前3位為單字的同步字頭,最后1位是奇偶校驗(yàn)位[15]。命令字位于每條消息的起始部分,其內(nèi)容決定消息的特征與標(biāo)識(shí),狀態(tài)字只能由RT發(fā)出,其內(nèi)容表征RT向BC發(fā)出的有效命令的反饋,BC根據(jù)狀態(tài)字內(nèi)容決定下一步操作。數(shù)據(jù)字支持RT->BC、BC->RT、RT->RT傳輸數(shù)據(jù)[16],具體字內(nèi)容如圖2所示。

        圖2 1553B總線字格式

        1553B總線采用指令/響應(yīng)型通信協(xié)議,包括3種終端:總線控制器BC、遠(yuǎn)程終端RT、總線監(jiān)視器(MT,monitor terminal)。傳輸?shù)男畔⒏袷接蠦C->RT、RT->BC、RT->RT、廣播方式和系統(tǒng)控制方式,且全部在BC的參與下完成。1553B總線傳輸消息的標(biāo)準(zhǔn)過(guò)程為:BC向某RT發(fā)送接收/發(fā)送指令,RT在給定的響應(yīng)時(shí)間范圍內(nèi)發(fā)回一個(gè)狀態(tài)字,并執(zhí)行消息的接收/發(fā)送[17]。消息傳輸格式如圖3所示。其中*表示響應(yīng)時(shí)間,范圍是4.0~12.0 μs,表示消息間隔時(shí)間,規(guī)定>4 μs。

        圖3 消息傳輸格式

        2.1.2 1553B物理實(shí)現(xiàn)邏輯研究

        1553B實(shí)現(xiàn)虛擬化,完成與被測(cè)件數(shù)據(jù)、指令交互,需要清晰的梳理出1553B物理實(shí)現(xiàn)邏輯。在1553B總線簡(jiǎn)介中指出3種終端:BC、RT、MT,其中BC、RT完成總線指令、總線數(shù)據(jù)的收發(fā)。本段著重介紹BC、RT的物理邏輯。

        RT存儲(chǔ)器結(jié)構(gòu)在非增強(qiáng)模式和增強(qiáng)模式下,有如表1所示幾個(gè)區(qū)域均被設(shè)置為專用區(qū)。其他區(qū)域?yàn)閿?shù)據(jù)塊等。RT查找表實(shí)現(xiàn)將TX/RX/BCST子地址對(duì)應(yīng)的數(shù)據(jù)塊映射到共享RAM區(qū)的機(jī)制。可對(duì)單獨(dú)子地址所指向的存儲(chǔ)空間進(jìn)行讀寫操作,對(duì)廣播、接收、發(fā)送數(shù)據(jù)分離處理,實(shí)現(xiàn)安全、獨(dú)立的存取數(shù)據(jù)。RT指令堆棧的長(zhǎng)度可設(shè)為125字、512字、1 024字、2 048字。

        1553B采用雙緩存機(jī)制,對(duì)應(yīng)查找表A、B。每個(gè)查找表分4塊:32個(gè)發(fā)送子地址、32個(gè)接收子地址、32個(gè)廣播子地址、32個(gè)子地址控制字。RT查找表具體內(nèi)容如表2所示。

        表1 RT存儲(chǔ)器機(jī)構(gòu)固定部分

        表2 RT查找表

        子地址控制字中存儲(chǔ)管理器2、存儲(chǔ)管理器1、存儲(chǔ)管理器0(MM,memery management)3 bit的取值,設(shè)置每次發(fā)送、接收或廣播數(shù)據(jù)的長(zhǎng)度,長(zhǎng)度可設(shè)置為128字、256字、512字、1 024字、4 096字及8 192字。1553B虛擬化設(shè)計(jì)中要支持根據(jù)子地址控制字設(shè)置收發(fā)緩存大小[18]。

        在1553B虛擬化時(shí),根據(jù)總線指令的收發(fā)子地址,對(duì)應(yīng)查找表查詢到該子地址對(duì)應(yīng)的內(nèi)存存儲(chǔ)起始地址。接收到的數(shù)據(jù)被寫入由查找表指針指向的數(shù)據(jù)塊,需要發(fā)送的數(shù)據(jù)從查找表指針指向的數(shù)據(jù)塊取出并發(fā)送。

        2.1.3 BC虛擬化實(shí)現(xiàn)

        1553B的BC虛擬化需要仿真上述“物理實(shí)現(xiàn)邏輯研究”中指出的1553B初始化、查詢查找表、讀寫子地址對(duì)應(yīng)存儲(chǔ)區(qū)等。仿真BC2RT數(shù)據(jù)、BC2RT指令、RT2BC數(shù)據(jù)、RT2BC指令等數(shù)據(jù)、指令的交互過(guò)程。使用共享內(nèi)存模擬查找表及數(shù)據(jù)塊的存儲(chǔ)邏輯。定義兩個(gè)枚舉結(jié)構(gòu)體Enum1553B_Channel_Num、EnumCommand分別表示AB區(qū)、BC指令類型,對(duì)應(yīng)代碼如下所示:

        public enum Enum1553B_Channel_Num{

        ChannelA = 0,

        ChannelB = 1

        }

        public enum EnumCommand{

        BC2RT,

        RT2BC,

        RT2RT,

        Broadcast,

        RT2RTs,

        ModeCode,

        BroadcastModeCode,

        NoUsed,

        Error

        }

        定義BC仿真類BcHelper,完成1553B總線的初始化。初始化包括:映射的內(nèi)存地址StartAddr、1553B指令地址BcCmdAddr,1553B相關(guān)寄存器地址映射(RT指令堆棧指針A、RT指令堆棧指針B、傳送矢量字、數(shù)據(jù)同步、查找表A起始地址、查找表B起始地址、發(fā)送查找指針表、接收查找指針表、廣播查找指針表、子地址控制字表等),初始化內(nèi)容如下所示:

        public static EnumIntName IntName = EnumIntName.NoInt;

        // BC模擬器地址映射

        public static UInt32 StartAddr = 0; //映射的mem地址

        public static UInt16 BcCmdAddr = 0; //映射的1553B指令地址

        //增強(qiáng)型1553B寄存器地址映射

        private static UInt32 AddressStackA = 0; //堆棧

        public static UInt32 AddressRtCommandStackPointerA = 0x100;

        public static UInt32 AddressRtCommandStackPointerB = 0x104;

        private static UInt32 AddressTransmitVetcorWord = 0x120;

        private static UInt32 AddressSynchronizeWithData = 0x111;

        private static UInt32 AddressReceiveLookupPointerTableA = 0x140;

        private static UInt32 AddressReceiveLookupPointerTableB = 0x1c0;

        private static UInt32 AddressTransmitLookupPointerTableA = 0x160;

        private static UInt32 AddressTransmitLookupPointerTableB = 0x1e0;

        private static UInt32 AddressBroadcastLookupPointerTableA = 0x180;

        private static UInt32 AddressBroadcastLookupPointerTableB = 0x200;

        private static UInt32 AddressSubaddressControlWordTableA = 0x1a0;

        private static UInt32 AddressSubaddressControlWordTableB = 0x220;

        private static UInt32 AddressDataBlock = 0x260;

        }

        BC端發(fā)送控制命令的仿真函數(shù)如下所示:

        ///

        /// 發(fā)控制命令

        ///

        /// RT地址

        /// 發(fā)送標(biāo)志,0標(biāo)識(shí)RT端接收

        /// 子地址

        /// 長(zhǎng)度/方式字(指1553B發(fā)送的"字"的長(zhǎng)度)

        /// 發(fā)送的數(shù)據(jù)

        /// 是否是廣播標(biāo)志

        /// 通道標(biāo)志

        public static void SendCmd(Enum1553B_Channel_Num channel, bool bcst, int rtAddr, bool rx, int sa, int len, byte[] data)

        仿真控制命令后可實(shí)現(xiàn)如下過(guò)程模擬:BC發(fā)送廣播、BC2RT數(shù)據(jù)、BC2RT命令、方同步碼等??刂泼盍鞒倘鐖D4所示。其中查找表仿真方法為:

        1)判斷當(dāng)前控制命令的類型:廣播、發(fā)送。

        2)判斷當(dāng)前命令由BC發(fā)到RT的哪個(gè)SA。

        3)查詢查找表中該SA對(duì)應(yīng)的存儲(chǔ)起始地址,以及嵌入式軟件設(shè)置的內(nèi)存起始地址,計(jì)算出該SA數(shù)據(jù)塊在共享內(nèi)存中的存儲(chǔ)區(qū)域。

        4)將SA對(duì)應(yīng)的存儲(chǔ)區(qū)域數(shù)據(jù)取出后發(fā)送給RT。

        圖4 控制命令仿真流程

        BC端接收RT發(fā)來(lái)數(shù)據(jù)(RT2BC數(shù)據(jù))的仿真過(guò)程如圖5所示。其中對(duì)查找表的使用與發(fā)送控制命令仿真部分相同。

        圖5 BC接收RT數(shù)據(jù)流程

        2.1.4 RT虛擬化實(shí)現(xiàn)

        實(shí)際應(yīng)用中被測(cè)件有時(shí)作為BC端使用,在構(gòu)建測(cè)試環(huán)境時(shí)需要對(duì)外設(shè)RT進(jìn)行虛擬化仿真,即實(shí)現(xiàn)RT2BC數(shù)據(jù)、RT2BC指令、RT2RT、RT2RTS、BC2RT等數(shù)據(jù)、指令的交互過(guò)程[19]。

        模擬RT端接收BC發(fā)來(lái)的指令、數(shù)據(jù),將收到的數(shù)據(jù)放入本地共享內(nèi)存,共享內(nèi)存的組織方式與“BC端仿真模擬”一致。外設(shè)RT收到作為BC的被測(cè)件發(fā)送的。模擬RT端的處理流程如圖6所示。

        圖6 RT端仿真處理流程

        2.2 AD采集虛擬化設(shè)計(jì)與實(shí)現(xiàn)

        2.2.1 AD采集虛擬化設(shè)計(jì)

        實(shí)際應(yīng)用中嵌入式軟件通過(guò)AD采集模塊采集模擬信號(hào),經(jīng)過(guò)模數(shù)轉(zhuǎn)化,將轉(zhuǎn)換后的數(shù)字量用于軟件的后續(xù)使用[20]。

        嵌入式軟件采集信號(hào)后的處理過(guò)程,實(shí)際使用的是數(shù)字量而非模擬量。因此,在測(cè)試平臺(tái)中無(wú)需仿真模數(shù)轉(zhuǎn)換過(guò)程,可直接將數(shù)字量值賦給嵌入式軟件。數(shù)字量可通過(guò)AD采集界面設(shè)置任意值,供嵌入式軟件采集。既能滿足嵌入式軟件從AD采集模塊獲取數(shù)字量的要求,又能滿足AD采集模塊測(cè)試的充分性。

        2.2.2 AD采集虛擬化實(shí)現(xiàn)

        不同被測(cè)件AD采集部分的處理過(guò)程有相似之處,將通用的處理過(guò)程抽象為AD采集模塊,完成AD采集外設(shè)的虛擬化。AD數(shù)據(jù)的采集與外設(shè)的交互部分涉及采集通道選擇、采集高低字節(jié)、采集次數(shù)等。嵌入式軟件與外設(shè)交互的流程如圖7所示。

        圖7 AD采集外設(shè)交互流程

        實(shí)現(xiàn)AD采集虛擬化,需要開辟一段共享內(nèi)存用于存儲(chǔ)測(cè)試人員設(shè)置的一組AD值,數(shù)值內(nèi)容要求:

        1)采集的路數(shù);

        2)每路數(shù)據(jù)采集次數(shù);

        3)每次采集值,支持設(shè)置不同值。

        被測(cè)件第某次采集某路AD數(shù)據(jù)時(shí),觸發(fā)測(cè)試平臺(tái)的讀回調(diào)函數(shù)。在回調(diào)函數(shù)中判斷當(dāng)次采集為嵌入式軟件第幾次采集第幾路AD數(shù)據(jù),取出共享內(nèi)存中對(duì)應(yīng)的AD值,供嵌入式軟件采集。AD采集虛擬化處理流程與圖7所示的嵌入式軟件與AD外設(shè)交互流程相同。

        不同嵌入式軟件通過(guò)測(cè)試平臺(tái)界面可配置采集AD數(shù)據(jù)通道、采集地址、CPU時(shí)鐘頻率、采集方式等信息,如圖8所示。

        圖8 AD采集配置界面

        2.3 總線RS422虛擬化設(shè)計(jì)與實(shí)現(xiàn)

        2.3.1 總線RS422虛擬化設(shè)計(jì)

        串行總線RS422通信由于其在傳輸距離、抗干擾能力方面的優(yōu)勢(shì),在航天嵌入式軟件中普遍應(yīng)用[21]。嵌入式軟件測(cè)試時(shí)主要關(guān)心被測(cè)件從串口采集數(shù)據(jù)之后的處理流程正確與否,以及觀察被測(cè)件輸出的串口數(shù)據(jù)。被測(cè)件通過(guò)串口采集數(shù)據(jù)的方式為:MOV A SBUF;通過(guò)串口輸出數(shù)據(jù)的方式為:MOV SBUF A。其中SBUF為寄存器0x99。

        因此,在測(cè)試平臺(tái)開發(fā)中無(wú)需仿真串口全部物理功能,只需實(shí)現(xiàn)被測(cè)件從串口采集、輸出數(shù)據(jù)的過(guò)程。測(cè)試人員根據(jù)測(cè)試需求,靈活設(shè)置正確值、邊界值、異常值等供被測(cè)件采集,用白盒測(cè)試法分析被測(cè)件采集串口數(shù)據(jù)后不同處理分支的正確性。被測(cè)件通過(guò)串口輸出的數(shù)據(jù),由測(cè)試平臺(tái)接收并依據(jù)通信協(xié)議完成解析,方便測(cè)評(píng)人員觀察。

        2.3.2 總線RS422虛擬化實(shí)現(xiàn)

        實(shí)現(xiàn)對(duì)總線RS422的虛擬化,處理邏輯如圖9所示。

        圖9 RS422總線數(shù)據(jù)交互流程

        具體方法如下:

        1)測(cè)試人員設(shè)置輸入激勵(lì)并存入共享隊(duì)列;

        2)被測(cè)件運(yùn)行到需要從RS422獲取數(shù)據(jù)處,即從寄存器0x99讀取數(shù)據(jù),觸發(fā)測(cè)試平臺(tái)的讀回調(diào)函數(shù)。測(cè)試平臺(tái)將共享隊(duì)列中的測(cè)試激勵(lì)通過(guò)0x99注入被測(cè)件;

        3)被測(cè)件通過(guò)串行總線RS422輸出數(shù)據(jù)時(shí),即通過(guò)寄存器0x99輸出數(shù)據(jù),觸發(fā)測(cè)試平臺(tái)寫回調(diào)函數(shù)。測(cè)試平臺(tái)依據(jù)被測(cè)件通信協(xié)議接收一整幀串口數(shù)據(jù)后,完成解析并在測(cè)試平臺(tái)界面顯示。測(cè)評(píng)人員通過(guò)界面觀察被測(cè)件輸出的串口數(shù)據(jù),判斷其運(yùn)行是否合理。

        2.4 I/O虛擬化設(shè)計(jì)與實(shí)現(xiàn)

        2.4.1 I/O虛擬化設(shè)計(jì)

        嵌入式軟件外設(shè)包括上述通用的1553B、RS422、AD采集,還包括與FPGA、DSP或其他外設(shè)交互的硬件信號(hào)、數(shù)據(jù)等。建立完整的嵌入式軟件數(shù)字仿真測(cè)試環(huán)境,還需定制化的完成被測(cè)軟件全部輸入數(shù)據(jù)、全部輸出數(shù)據(jù)解析的仿真[22]。這部分定制化的外設(shè)仿真統(tǒng)稱為I/O虛擬化。

        2.4.2 I/O虛擬化實(shí)現(xiàn)

        I/O虛擬化實(shí)現(xiàn)過(guò)程與總線RS422虛擬化相似,與流程圖9不同之處為:“測(cè)試人員設(shè)置外圍激勵(lì)”,此處提供兩種設(shè)置激勵(lì)的方法,測(cè)試人員可通過(guò)界面和具有固定格式的Excel表格設(shè)置外圍激勵(lì);其次,被測(cè)件從總線RS422取數(shù),改為從通過(guò)I/O交互數(shù)據(jù)的外設(shè)采集取數(shù)。I/O虛擬化實(shí)現(xiàn)的具體方法如下:

        1)針對(duì)不同外設(shè)開辟一段獨(dú)占的共享內(nèi)存,用于存儲(chǔ)測(cè)試人員設(shè)定的測(cè)試激勵(lì)。

        2)設(shè)計(jì)固定格式的Excel表格,如表3所示。測(cè)試人員將測(cè)試激勵(lì)填入表格,測(cè)試平臺(tái)運(yùn)行后自動(dòng)讀取表格內(nèi)容,將數(shù)據(jù)及地址成對(duì)的存入共享內(nèi)存。

        表3 I/O固定輸入數(shù)據(jù)格式

        3)測(cè)試過(guò)程中,通過(guò)界面實(shí)時(shí)設(shè)置測(cè)試激勵(lì)。

        4)被測(cè)件運(yùn)行至采集外設(shè)數(shù)據(jù)地址處,觸發(fā)測(cè)試平臺(tái)的讀回調(diào)函數(shù)。測(cè)試平臺(tái)根據(jù)接收到的“讀地址”,將共享內(nèi)存中對(duì)應(yīng)的數(shù)據(jù)發(fā)送給被測(cè)軟件。

        5)被測(cè)件向“寫地址”輸出1字節(jié)數(shù)據(jù)或者一幀遙測(cè)數(shù)據(jù)時(shí),觸發(fā)測(cè)試平臺(tái)的寫回調(diào)函數(shù)。測(cè)試平臺(tái)記錄接收到的“寫地址”以及對(duì)應(yīng)1字節(jié)數(shù)據(jù)或者一幀遙測(cè)數(shù)據(jù),依照通信協(xié)議完成被測(cè)件輸出數(shù)據(jù)的解析。測(cè)試人員可通過(guò)界面實(shí)時(shí)觀察被測(cè)軟件的輸出信息。

        3 實(shí)驗(yàn)結(jié)果與分析

        為驗(yàn)證上述描述的嵌入式軟件外設(shè)虛擬化的有效性和可靠性。以某電源下位機(jī)軟件測(cè)試平臺(tái)開發(fā)為例,模擬1553B、RS422、I/O、AD采集等外設(shè),實(shí)現(xiàn)被測(cè)件外圍環(huán)境的正常功能測(cè)試、異常故障用例注入,提高測(cè)試的充分性,完成對(duì)該電源下位機(jī)軟件的測(cè)試工作。該電源下位機(jī)軟件主要功能是太陽(yáng)電池陣功率調(diào)節(jié)、蓄電池組充放電管理功能。需要完成工程參數(shù)的采集處理、遙控指令的執(zhí)行、蓄電池充電管理、均衡器控制等功能,通過(guò)1553B總線實(shí)現(xiàn)與綜合電子分系統(tǒng)的信息交換。

        3.1 測(cè)試平臺(tái)搭建

        3.1.1 上位機(jī)部分搭建

        基于自研測(cè)試平臺(tái)選擇1553B模塊、AD采集模塊、針對(duì)該電源下位機(jī)開發(fā)的I/O模塊。測(cè)試平臺(tái)模塊選擇界面如圖10所示。

        圖10 測(cè)試平臺(tái)搭建界面

        總線1553B虛擬化后需要通過(guò)界面配置接收發(fā)送子地址、廣播子地址、寄存器、中斷觸發(fā)等信息,以完成被測(cè)試軟件與外部設(shè)備通過(guò)1553B傳輸數(shù)據(jù)的仿真。配置界面如圖11所示。

        圖11 總線1553B配置界面

        AD采集外設(shè)模擬需要配置被測(cè)試軟件采集地址、采集高低字節(jié)地址等信息,配置界面如圖8所示。

        3.1.2 被測(cè)件運(yùn)行環(huán)境配置

        嵌入式軟件電源下位機(jī)程序的仿真運(yùn)行環(huán)境由Keil提供,配置基于AGSI編寫的動(dòng)態(tài)鏈接庫(kù),使用Keil加載源程序完成編譯。使用Keil軟件運(yùn)行電源下位機(jī)程序,可完成電源下位機(jī)程序動(dòng)態(tài)運(yùn)行下的白盒測(cè)試。其中動(dòng)態(tài)鏈接庫(kù)實(shí)現(xiàn)測(cè)試平臺(tái)與Keil軟件UDP通信、被測(cè)試軟件內(nèi)存、寄存器的讀寫監(jiān)視、定時(shí)器設(shè)置、時(shí)需同步、中斷觸發(fā)等。

        3.2 測(cè)試平臺(tái)運(yùn)行與測(cè)試

        測(cè)試平臺(tái)運(yùn)行界面如圖12所示。測(cè)試人員可通過(guò)運(yùn)行界面的左側(cè)設(shè)置注入激勵(lì)的內(nèi)容,實(shí)時(shí)更改注入的總線1553B、RS422的指令幀或者數(shù)據(jù),以及被測(cè)件需要從I/O外設(shè)采集的全部數(shù)據(jù)。運(yùn)行界面右側(cè)為被測(cè)件上傳數(shù)據(jù)的實(shí)時(shí)顯示。

        圖12 運(yùn)行界面

        AD采集界面如圖13所示,測(cè)試人員可實(shí)時(shí)更改供被測(cè)件采集的各路AD數(shù)據(jù)。支持直接在界面上更改AD值、導(dǎo)入AD數(shù)據(jù)Excel表格兩種方式設(shè)置AD值。

        圖13 AD采集界面

        通過(guò)測(cè)試平臺(tái)完成被測(cè)件中斷INT0、T0、T1執(zhí)行時(shí)間、中斷響應(yīng)總線指令時(shí)間的記錄,以及周期發(fā)送指令、覆蓋率統(tǒng)計(jì)。程序地址計(jì)數(shù)器(PC,program counter)用于存放要執(zhí)行指令的地址,16位,能自動(dòng)加1。一個(gè)機(jī)器周期(M-Machine周期)是12個(gè)時(shí)鐘周期,當(dāng)主頻為12 MHz時(shí),一個(gè)機(jī)器周期為:1 M = 1/12 MHz*12=1 μs。被測(cè)件某段程序執(zhí)行時(shí)間的計(jì)算方法是:記錄該段程序起止PC之間執(zhí)行的機(jī)器周期數(shù),乘以一個(gè)機(jī)器周期的時(shí)間,得到該段程序的執(zhí)行時(shí)間。

        3.3 測(cè)試結(jié)果分析

        該電源下位機(jī)軟件共使用3種中斷INT0、T0、T1,中斷服務(wù)程序執(zhí)行時(shí)間的測(cè)試結(jié)果如表4所示。

        表4 中斷服務(wù)程序執(zhí)行時(shí)間

        覆蓋率統(tǒng)計(jì)支持被測(cè)件目標(biāo)碼覆蓋率情況保存、多個(gè)覆蓋率文件合并,源碼目標(biāo)碼對(duì)照顯示。統(tǒng)計(jì)結(jié)果針對(duì)目標(biāo)碼執(zhí)行情況進(jìn)行分析,其中包括6種執(zhí)行結(jié)果:

        1)EX:executed,該條目標(biāo)碼語(yǔ)句執(zhí)行,覆蓋率統(tǒng)計(jì)結(jié)果中以綠色顯示;

        2)NE:Not Executed,語(yǔ)句沒有執(zhí)行,覆蓋率統(tǒng)計(jì)結(jié)果中以紅色顯示;

        3)JF:Jump Fully,分支完全執(zhí)行,覆蓋率統(tǒng)計(jì)結(jié)果中以黃色顯示;

        4)JN:Jump Never,分支順序執(zhí)行,但是沒有跳轉(zhuǎn),即每次執(zhí)行到這條語(yǔ)句,跳轉(zhuǎn)條件都不滿足,覆蓋率統(tǒng)計(jì)結(jié)果中以黃色顯示;

        5)JO:Jump Only,執(zhí)行了分支跳轉(zhuǎn),但是沒有順序執(zhí)行,即每次執(zhí)行到這條語(yǔ)句都是跳轉(zhuǎn),覆蓋率統(tǒng)計(jì)結(jié)果中以黃色顯示;

        6)JNE(jump not executed),跳轉(zhuǎn)分支、順序分支都沒有執(zhí)行,覆蓋率統(tǒng)計(jì)結(jié)果中以紅色顯示。

        目標(biāo)碼覆蓋率統(tǒng)計(jì)結(jié)果中先顯示一句源碼,緊接著顯示對(duì)應(yīng)的目標(biāo)碼,并在第一列顯示每條目標(biāo)碼的執(zhí)行情況。根據(jù)每條目標(biāo)碼的執(zhí)行情況標(biāo)示綠色、紅色、黃色,方便測(cè)評(píng)人員觀察,如圖14所示。

        被測(cè)件目標(biāo)碼覆蓋率統(tǒng)計(jì)情況如表5所示,包括目標(biāo)碼模塊名、總指令數(shù)、執(zhí)行指令數(shù)、執(zhí)行百分比、總跳轉(zhuǎn)指令數(shù)、JF指令數(shù)、JO指令數(shù)、JN指令書、JNE指令數(shù)、JF執(zhí)行百分比。部分嵌入式軟件目標(biāo)碼分支、語(yǔ)句覆蓋率均要達(dá)到百分之百。表5展示覆蓋率統(tǒng)計(jì)功能,并非電源下位機(jī)軟件第三方測(cè)試的最終覆蓋率統(tǒng)計(jì)結(jié)果。

        實(shí)驗(yàn)結(jié)果證明,在自研測(cè)試平臺(tái)基礎(chǔ)上,基于Keil C51完成嵌入式軟件外設(shè)虛擬化,實(shí)現(xiàn)嵌入式軟件仿真運(yùn)行、外圍激勵(lì)注入、外設(shè)硬件接口模擬的方法切實(shí)可行。通過(guò)數(shù)字測(cè)試平臺(tái)不僅能夠完成與實(shí)物測(cè)試平臺(tái)相同的測(cè)試效果,還能完成故障注入、邊界測(cè)試、目標(biāo)碼覆蓋率等。

        表5 目標(biāo)碼覆蓋率統(tǒng)計(jì)結(jié)果

        附注:表格中為第三方測(cè)試進(jìn)行中,被測(cè)件目標(biāo)碼覆蓋率統(tǒng)計(jì)結(jié)果的部分展示

        4 結(jié)束語(yǔ)

        本文提出的基于Keil C51的嵌入式軟件外設(shè)虛擬化,實(shí)現(xiàn)了在真實(shí)環(huán)境中運(yùn)行的嵌入式軟件與全部外部設(shè)備交互數(shù)據(jù)的仿真,使得測(cè)試過(guò)程不受硬件實(shí)物平臺(tái)的使用限制,擁有充分的測(cè)試時(shí)間。

        1)在測(cè)試過(guò)程中,外部設(shè)備的虛擬化提供了靈活的測(cè)試激勵(lì)注入方式,能夠完成實(shí)物測(cè)試環(huán)境難以模擬的故障注入、邊界測(cè)試以及測(cè)試結(jié)果實(shí)時(shí)顯示。

        2)目標(biāo)碼覆蓋率統(tǒng)計(jì)能夠幫助測(cè)評(píng)人員分析被測(cè)件代碼執(zhí)行情況,精準(zhǔn)定位未執(zhí)行的語(yǔ)句、分支。輔助測(cè)評(píng)人員分析未執(zhí)行的原因,針對(duì)性的設(shè)計(jì)測(cè)試用例,進(jìn)而完成未執(zhí)行語(yǔ)句、分支的覆蓋。

        3)嵌入式軟件外設(shè)虛擬化后,主要解決了測(cè)試工作中的兩個(gè)問題:測(cè)試過(guò)程不依賴嵌入式軟件真實(shí)的運(yùn)行環(huán)境;測(cè)試過(guò)程內(nèi)存、寄存器信息可控可改,測(cè)試用例注入方式靈活,能夠完成實(shí)物測(cè)試環(huán)境不能滿足的故障、邊界測(cè)試。

        4)外設(shè)的虛擬化設(shè)計(jì),不僅能夠緩解目前航天型號(hào)領(lǐng)域嵌入式軟件測(cè)試過(guò)程中實(shí)物運(yùn)行環(huán)境使用時(shí)間沖突的問題,而且對(duì)提高嵌入式軟件的測(cè)試效率和測(cè)試充分性也有幫助。

        猜你喜歡
        指令
        聽我指令:大催眠術(shù)
        ARINC661顯控指令快速驗(yàn)證方法
        LED照明產(chǎn)品歐盟ErP指令要求解讀
        殺毒軟件中指令虛擬機(jī)的脆弱性分析
        巧用G10指令實(shí)現(xiàn)橢圓輪廓零件倒圓角
        中斷與跳轉(zhuǎn)操作對(duì)指令串的影響
        科技傳播(2015年20期)2015-03-25 08:20:30
        基于匯編指令分布的惡意代碼檢測(cè)算法研究
        一種基于滑窗的余度指令判別算法
        歐盟修訂電氣及電子設(shè)備等產(chǎn)品安全規(guī)定
        家電科技(2014年5期)2014-04-16 03:11:28
        MAC指令推動(dòng)制冷劑行業(yè)發(fā)展
        汽車零部件(2014年2期)2014-03-11 17:46:27
        国产一区二区三区在线蜜桃| 日日摸日日碰人妻无码老牲| 精品久久综合一区二区| 久久深夜中文字幕高清中文| 亚洲av男人的天堂一区| 九色综合九色综合色鬼| a级黑人大硬长爽猛出猛进| 亚洲中文欧美日韩在线| 亚洲av高清一区三区三区| av高清在线不卡直播| 日韩毛片免费无码无毒视频观看| 亚洲人免费| 蜜桃一区二区免费视频观看| 成人激情视频在线手机观看| 国产又猛又黄又爽| 最新亚洲精品国偷自产在线 | 亚洲国产天堂久久综合网| 性饥渴艳妇性色生活片在线播放 | 色狠狠一区二区三区中文| 中文www新版资源在线| 国产欧美精品一区二区三区–老狼| 青青草国内视频在线观看| 蜜桃视频网站在线观看一区| 无码精品久久久久久人妻中字| 国内精品伊人久久久久av| 成人亚洲av网站在线看| 野花香社区在线视频观看播放| 欧美mv日韩mv国产网站| 91尤物在线看| 一区二区视频中文字幕| 狠狠做深爱婷婷久久综合一区| 中文人妻无码一区二区三区| 亚洲永久精品日韩成人av| 含紧一点h边做边走动免费视频| 国产真人无遮挡作爱免费视频| 蜜桃伦理一区二区三区| 女同同性av观看免费| 国产精品igao视频| 日本一道dvd在线中文字幕| 精品国产一区二区三区a| 在线视频观看国产色网|