丁香婷婷网,黄色av网站裸体无码www,亚洲午夜无码精品一级毛片,国产一区二区免费播放

現(xiàn)在位置:范文先生網(wǎng)>理工論文>計(jì)算機(jī)信息技術(shù)>實(shí)時嵌入式軟件測試工具的研究

實(shí)時嵌入式軟件測試工具的研究

  • 相關(guān)推薦

實(shí)時嵌入式軟件測試工具的研究

  摘要:
  
  應(yīng)用仿真的方法對實(shí)時嵌入式軟件進(jìn)行脫離硬件環(huán)境的測試,構(gòu)造適用于仿真環(huán)境的被測軟件運(yùn)行環(huán)境,提出了適用于不同運(yùn)行環(huán)境的測試模型。
  
  關(guān)鍵詞:軟件測試 仿真 軟件測試平臺
  
  A Research on Real-Time Embedded Software Testing Tools
  
  ABSTRACT This thesis has a test for the Real-Time Embedded Software under the environment without the real hardware with simulation. Construct an environment suitable for the simulation of software running, and put forward some testing models suitable for varied environment.
  
  引言
  
  在國內(nèi),目前大型的軟件工程中大都使用國外的軟件測試平臺,我們在測試工程中使用法國的LOGISCOPE測試平臺對C語言開發(fā)的實(shí)時嵌入式軟件進(jìn)行測試。
  
  由于實(shí)時嵌入式軟件主要是對外部接口設(shè)備進(jìn)行控制,而被送檢的軟件需要大量不同的硬件環(huán)境,在進(jìn)行測試時,由于無法建立大量不同的接口設(shè)備的硬件仿真環(huán)境,每當(dāng)執(zhí)行輸入輸出指令時,程序便無法繼續(xù)運(yùn)行,因此,測試軟件無法完整地覆蓋整個程序的各個分支和語句。同時,被測試軟件常常需要多個模塊同時對某個外設(shè)進(jìn)行共同測試,需要通過網(wǎng)絡(luò)環(huán)境進(jìn)行集中測試。
  
  為了完成對各種實(shí)時嵌入式軟件的測試工作,我們研制開發(fā)了基于網(wǎng)絡(luò)的接口設(shè)備的軟件仿真環(huán)境,使得用戶程序運(yùn)行時不再需要真正的接口硬件設(shè)備,而是與仿真軟件進(jìn)行通訊,交換數(shù)據(jù),從而使得被測程序在脫離硬件的環(huán)境中順利運(yùn)行。本課題主要解決C語言和匯編語言混合編程中,把所有原來控制外設(shè)的輸入輸出指令都修改成與仿真軟件進(jìn)行通信的函數(shù),同時,把原來由硬件觸發(fā)的中斷處理功能轉(zhuǎn)由軟件觸發(fā),以及通過網(wǎng)絡(luò)環(huán)境完成多模塊的集中測試。
  
  本課題的意義在于建成一種通用的方法,使得不同軟件開發(fā)的程序都能夠使用這些功能模塊與接口仿真軟件進(jìn)行通信,從而順利地進(jìn)行軟件測試。
  
  被測軟件的運(yùn)行環(huán)境絕大多數(shù)是基于DOS的,在仿真環(huán)境下進(jìn)行測試時,由于原來的硬件環(huán)境不再存在,因此要求對被測軟件進(jìn)行相應(yīng)的修改,使其在一個新的系統(tǒng)模型當(dāng)中運(yùn)行:原來與硬件進(jìn)行I/O的指令,變成對仿真軟件通訊動態(tài)鏈接庫中函數(shù)的調(diào)用;由硬件觸發(fā)的中斷信號變成來自仿真軟件的消息;更重要的是,原來由CPU負(fù)責(zé)調(diào)度的中斷服務(wù)函數(shù)必須由新的模型來負(fù)責(zé)(因?yàn)椴辉儆杏布袛嘈盘枺,而由于DOS是一個單任務(wù)的操作系統(tǒng),系統(tǒng)模型需要解決以下的問題:系統(tǒng)如何在程序運(yùn)行的時刻檢測到通過網(wǎng)絡(luò)發(fā)過來的“中斷信號”,如何中斷當(dāng)前的程序,去執(zhí)行相應(yīng)的中斷服務(wù)函數(shù),如何具有中斷嵌套的功能。
  
  基于以上要求,系統(tǒng)模型采用以下兩種:
  
  基于DOS的多任務(wù)調(diào)度系統(tǒng)模型
  
  基于Windows多線程環(huán)境的系統(tǒng)模型
  
  2.基于DOS環(huán)境的多任務(wù)調(diào)度模型
  
  2.1實(shí)現(xiàn)原理
  
  想要在DOS環(huán)境下實(shí)現(xiàn)多任務(wù)調(diào)度,必須使每個任務(wù)具有自己的堆棧。首先,棧用來實(shí)現(xiàn)任務(wù)切換,其次,它用來存貯任務(wù)的局部變量。
  
  任務(wù)的切換是通過調(diào)用一個子程序來實(shí)現(xiàn)的,該子程序?qū)⒍褩V羔樣稍瓉碇赶蚶先蝿?wù)的堆棧置為指向新任務(wù)的堆棧。程序返回時,新的任務(wù)指令指針(IP)就從棧中彈出。新任務(wù)就開始自動開始執(zhí)行。
  
  這個負(fù)責(zé)調(diào)度的子程序是通過時鐘中斷來定期觸發(fā)的。當(dāng)產(chǎn)生時鐘中斷時,需要做兩件事情。首先,將標(biāo)志(Flags)寄存器的內(nèi)容壓入棧中,其次,緊跟在指令指針(IP)之后,將CS(代碼段)也壓入棧中。最后,將中斷服務(wù)子程序的段地址裝入CS寄存器中,將偏址裝入IP寄存器中。這樣可以使ISR開始運(yùn)行。中斷返回時,CS,IP和Flags寄存器的內(nèi)容自動彈出。為了實(shí)現(xiàn)任務(wù)的調(diào)度,新的時鐘中斷服務(wù)函數(shù)要完成兩項(xiàng)工作。首先,它將除了棧指針(SP)和棧段(SS)寄存器之外的所有寄存器的值都存到棧中。(SP和SS的值存在另外的位置)。其次,它改變SS和SP寄存器的值,使它們指向另一個任務(wù)的堆棧。因此,當(dāng)ISR返回時,新的任務(wù)的堆棧被彈出到各寄存器中,這使得機(jī)器的狀態(tài)是針對新的任務(wù)的。由于IP中也是彈出的寄存器的值,因此新任務(wù)就開始執(zhí)行。
  
  在任務(wù)運(yùn)行前,它必須按一定方式使堆棧初始化,這樣使得當(dāng)?shù)谝粋時間片到來時,從棧中彈出的值能夠使該任務(wù)從頭開始運(yùn)行。因此,任務(wù)的堆棧必須初始化并存放正確的寄存器值,同時指令指針也必須指向程序中的第一條指令。
  
  2.2調(diào)度內(nèi)核實(shí)現(xiàn)所用到的數(shù)據(jù)結(jié)構(gòu)
  
  interrupt 類型
  
  當(dāng)說明一個函數(shù)為interrupt類型時,它告訴編譯器自動保存所有寄存器(sp和ss除外)的值,并且IRET指令終止該函數(shù)。每當(dāng)進(jìn)入到interrupt函數(shù)時,執(zhí)行下列指令:
  
  push ax, push bx, push cx,
  
  push dx, push es, push ds
  
  push si, push di, push bp
  
  發(fā)生中斷時,CPU自動將Flags,cs和IP寄存器壓棧。因此,在interrupt函數(shù)入口處,堆棧如圖2.2.1.2所示。我們將利用interrupt函數(shù)的棧的安排方式對要執(zhí)行的任務(wù)的堆棧進(jìn)行初始化。
  
  Bp<-top of stack
  
  DI
  
  SI
  
  DS
  
  ES
  
  DX
  
  CX
  
  BX
  
  AX
  
  IP
  
  CS
  
  PLAGS
  
  任務(wù)中使用的寄存器的數(shù)據(jù)結(jié)構(gòu)
  
  typedef struct int_regs{
  
  unsigned bp;
  
  unsigned di;
  
  unsigned si;
  
  unsigned ds;
  
  unsigned es;
  
  unsigned dx;
  
  unsigned cx;
  
  unsigned bx;
  
  unsigned ax;
  
  unsigned ip;
  
  unsigned cs;
  
  unsigned flags;
  
  };
  
  此結(jié)構(gòu)嚴(yán)格按照interrupt函數(shù)入口處堆棧的結(jié)構(gòu)定義,初始化時,將結(jié)構(gòu)中的代碼段(CS),指令指針(IP)設(shè)置成構(gòu)成此任務(wù)的函數(shù)的段地址和偏移地址。
  
  用于任務(wù)管理的數(shù)據(jù)結(jié)構(gòu)
  
  struct task_struct{
  
  unsigned sp;
  
  unsigned ss;
  
  unsigned char *stck;
  
  unsigned LastTask;
  
  unsigned IntNum;
  
  unsigned Status;
  
  }
  
  當(dāng)執(zhí)行任務(wù)切換時,sp和ss保存當(dāng)前棧指針和堆棧段地址,而任務(wù)調(diào)度程序?qū)?dāng)前棧指針(_SP)和棧地址(_SS)設(shè)置成下一個將要執(zhí)行的任務(wù)的棧指針和棧地址,當(dāng)調(diào)度程序結(jié)束運(yùn)行時,由于從棧中彈出的各個寄存器,包括代碼段和指令指針都是指向新任務(wù)的,因此,新任務(wù)將自動運(yùn)行,從而達(dá)到任務(wù)切換的目的。
  
  2.3應(yīng)用多任務(wù)調(diào)度功能實(shí)現(xiàn)對中斷的仿真處理
  
  由于被測試的用戶源程序是工作在仿真環(huán)境下,無法接收硬件產(chǎn)生的中斷信號從而自動執(zhí)行相應(yīng)的中斷服務(wù)程序。因此,改編后的程序應(yīng)該能夠定期檢查是否有從仿真軟件發(fā)過來的中斷信號,若有,則中斷當(dāng)前程序的執(zhí)行,轉(zhuǎn)入相應(yīng)的中斷服務(wù)函數(shù)執(zhí)行。
  
  因?yàn)橛脩舻某绦虍?dāng)中顯式地設(shè)置中斷向量,在改寫用戶的程序時,將每個中斷服務(wù)函數(shù)入口都置于一個向量數(shù)組當(dāng)中,此數(shù)組即為全局中斷向量表,將任務(wù)號與相應(yīng)的中斷號一一對應(yīng)。
  
  當(dāng)時鐘中斷觸發(fā)任務(wù)調(diào)度程序時,調(diào)度程序首先檢測由仿真軟件發(fā)來的中斷信號,如果有,則調(diào)度程序在當(dāng)前運(yùn)行的任務(wù)的數(shù)據(jù)結(jié)構(gòu)中保存堆棧段段地址寄存器(_SS)、棧指針寄存器(_SP)、當(dāng)前任務(wù)號,并將堆棧段段地址寄存器和棧指針寄存器設(shè)置成新的中斷服務(wù)程序所在的任務(wù)的相應(yīng)的值,使得當(dāng)調(diào)度程序返回時,能夠從新的任務(wù)開始運(yùn)行。然后生成一個新的任務(wù),在此任務(wù)當(dāng)中調(diào)度對應(yīng)于此中斷號的中斷服務(wù)程序這樣就可以實(shí)現(xiàn)中斷功能。
  
  3.基于Windows多線程環(huán)境的系統(tǒng)模型
  
  3.1實(shí)現(xiàn)原理
  
  考慮部分由C語言編寫的實(shí)時嵌入式程序經(jīng)過適當(dāng)?shù)男薷目梢杂蒝C編譯后,在Windows環(huán)境中運(yùn)行。因此可以利用Windows的多線程特性構(gòu)造系統(tǒng)模型:把用戶的主函數(shù)放在系統(tǒng)初始化時生成的一個主線程當(dāng)中運(yùn)行,同時,系統(tǒng)主函數(shù)監(jiān)測由Socket端口發(fā)來的數(shù)據(jù),如果是一個中斷產(chǎn)生信號,系統(tǒng)主函數(shù)掛起當(dāng)前正在執(zhí)行的線程,新生成一個新的線程,并在新線程中執(zhí)行相應(yīng)的中斷服務(wù)函數(shù)。
  
  3.2系統(tǒng)的結(jié)構(gòu)
  
  由于CSocket類不能夠由各個線程之間共享,而各個線程內(nèi)部又要通過Socket端口接收和發(fā)送數(shù)據(jù),因此應(yīng)建立高效而又防止各線程之間沖突的機(jī)制,下面是系統(tǒng)的結(jié)構(gòu)圖:
  
  當(dāng)線程需要通過Socket接口收發(fā)數(shù)據(jù)時,首先檢測/設(shè)置相應(yīng)函數(shù)的信號量,若此資源不能使用,則線程被自動掛起。系統(tǒng)的主調(diào)函數(shù)負(fù)責(zé)輪詢來自Socket接口的數(shù)據(jù)以及各個信號量資源,當(dāng)資源可用時,喚醒相應(yīng)的線程,完成其請求的操作。如果接收到中斷產(chǎn)生信號,則生成新的線程,并掛起當(dāng)前的線程,從而完成對中斷請求的響應(yīng)。
  
  4.結(jié)束語
  
  本文介紹了針對實(shí)時嵌入式軟件的測試工具的研究與完善工作,根據(jù)不同的軟件特點(diǎn),
  
  構(gòu)造了兩種系統(tǒng)模型。通過實(shí)際的使用,都達(dá)到了比較滿意的結(jié)果。
  
  這兩種系統(tǒng)模型經(jīng)過適當(dāng)?shù)男薷模梢詰?yīng)用在其它語言編寫的軟件上,從而可以實(shí)現(xiàn)通用的模塊功能。
  
  參考文獻(xiàn)
  
  呂強(qiáng) 楊季文等 C語言的DOS系統(tǒng)程序設(shè)計(jì) 清華大學(xué)出版社
  
  李沐孫 TURBO C 常駐內(nèi)存實(shí)用程序及窗口式軟件編程技術(shù) 北京科海
  
  陳宗海 基于C/S體系的工業(yè)過程仿真模型調(diào)試環(huán)境。計(jì)算機(jī)應(yīng)用。1999,4
  
  張海藩 軟件工程導(dǎo)論。清華大學(xué)出版社,1995
  
  朱利群 軟件測試模型及其實(shí)現(xiàn)。湖南師范大學(xué)自然科學(xué)學(xué)報(bào)1998 9
  
  王 璞 基于覆蓋的軟件測試技術(shù)在實(shí)時嵌入式軟件中的應(yīng)用研究。 計(jì)算機(jī)工程與設(shè)計(jì) 1998 12
  
  VOL.19 No.6
  
  洪 洋 軟件測試方法的應(yīng)用研究。 光電對抗與無源干擾 1998 ,2
  
  鄭人杰 計(jì)算機(jī)軟件測試技術(shù)清華大學(xué)出版社1990

【實(shí)時嵌入式軟件測試工具的研究】相關(guān)文章:

嵌入式軟件的覆蓋測試08-06

改善嵌入式Linux實(shí)時性能的方法研究08-19

嵌入式實(shí)時系統(tǒng)中斷管理技術(shù)研究08-06

嵌入式微內(nèi)核實(shí)時操作系統(tǒng)分析與測試08-06

嵌入式系統(tǒng)的實(shí)時性問題08-06

基于模塊化設(shè)計(jì)的嵌入式軟件測試方法08-06

嵌入式系統(tǒng)的實(shí)時數(shù)據(jù)接口擴(kuò)展08-06

嵌入式實(shí)時系統(tǒng)開發(fā)的正確選擇08-19

嵌入式系統(tǒng)通用的應(yīng)用軟件結(jié)構(gòu)研究08-06