<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x

    實時嵌入式軟件測試工具的研究

    發布時間:2010-9-30 10:01    發布者:eetech
    關鍵詞: 測試工具 , 嵌入式 , 軟件 , 實時
    1、引言  

    在國內,目前大型的軟件工程中大都使用國外的軟件測試平臺,我們在測試工程中使用法國的LOGISCOPE測試平臺對C語言開發的實時嵌入式軟件進行測試。

    由于實時嵌入式軟件主要是對外部接口設備進行控制,而被送檢的軟件需要大量不同的硬件環境,在進行測試時,由于無法建立大量不同的接口設備的硬件仿真環境,每當執行輸入輸出指令時,程序便無法繼續運行,因此,測試軟件無法完整地覆蓋整個程序的各個分支和語句。同時,被測試軟件常常需要多個模塊同時對某個外設進行共同測試,需要通過網絡環境進行集中測試。

    為了完成對各種實時嵌入式軟件的測試工作,我們研制開發了基于網絡的接口設備的軟件仿真環境,使得用戶程序運行時不再需要真正的接口硬件設備,而是與仿真軟件進行通訊,交換數據,從而使得被測程序在脫離硬件的環境中順利運行。本課題主要解決C語言和匯編語言混合編程中,把所有原來控制外設的輸入輸出指令都修改成與仿真軟件進行通信的函數,同時,把原來由硬件觸發的中斷處理功能轉由軟件觸發,以及通過網絡環境完成多模塊的集中測試。

    本課題的意義在于建成一種通用的方法,使得不同軟件開發的程序都能夠使用這些功能模塊與接口仿真軟件進行通信,從而順利地進行軟件測試。

    被測軟件的運行環境絕大多數是基于DOS的,在仿真環境下進行測試時,由于原來的硬件環境不再存在,因此要求對被測軟件進行相應的修改,使其在一個新的系統模型當中運行:原來與硬件進行I/O的指令,變成對仿真軟件通訊動態鏈接庫中函數的調用;由硬件觸發的中斷信號變成來自仿真軟件的消息;更重要的是,原來由CPU負責調度的中斷服務函數必須由新的模型來負責(因為不再有硬件中斷信號),而由于DOS是一個單任務的操作系統,系統模型需要解決以下的問題:系統如何在程序運行的時刻檢測到通過網絡發過來的“中斷信號”,如何中斷當前的程序,去執行相應的中斷服務函數,如何具有中斷嵌套的功能。

    基于以上要求,系統模型采用以下兩種:

    1、基于DOS的多任務調度系統模型  

    2、基于Windows多線程環境的系統模型

    3.基于DOS環境的多任務調度模型

    2.1實現原理

    想要在DOS環境下實現多任務調度,必須使每個任務具有自己的堆棧。首先,棧用來實現任務切換,其次,它用來存貯任務的局部變量。

    任務的切換是通過調用一個子程序來實現的,該子程序將堆棧指針由原來指向老任務的堆棧置為指向新任務的堆棧。程序返回時,新的任務指令指針(IP)就從棧中彈出。新任務就開始自動開始執行。

    這個負責調度的子程序是通過時鐘中斷來定期觸發的。當產生時鐘中斷時,需要做兩件事情。首先,將標志(Flags)寄存器的內容壓入棧中,其次,緊跟在指令指針(IP)之后,將CS(代碼段)也壓入棧中。最后,將中斷服務子程序的段地址裝入CS寄存器中,將偏址裝入IP寄存器中.這樣可以使ISR開始運行.中斷返回時,CS,IP和Flags寄存器的內容自動彈出。為了實現任務的調度,新的時鐘中斷服務函數要完成兩項工作。首先,它將除了棧指針(SP)和棧段(SS)寄存器之外的所有寄存器的值都存到棧中。(SP和SS的值存在另外的位置)。其次,它改變SS和SP寄存器的值,使它們指向另一個任務的堆棧。因此,當ISR返回時,新的任務的堆棧被彈出到各寄存器中,這使得機器的狀態是針對新的任務的。由于IP中也是彈出的寄存器的值,因此新任務就開始執行。

    在任務運行前,它必須按一定方式使堆棧初始化,這樣使得當第一個時間片到來時,從棧中彈出的值能夠使該任務從頭開始運行。因此,任務的堆棧必須初始化并存放正確的寄存器值,同時指令指針也必須指向程序中的第一條指令。

    2.2調度內核實現所用到的數據結構

    interrupt 類型  

    當說明一個函數為interrupt類型時,它告訴編譯器自動保存所有寄存器(sp和ss除外)的值,并且IRET指令終止該函數。每當進入到interrupt函數時,執行下列指令:

    push ax, push bx, push cx,

    push dx, push es, push ds

    push si, push di, push bp

    發生中斷時,CPU自動將Flags,cs和IP寄存器壓棧。我們將利用interrupt函數的棧的安排方式對要執行的任務的堆棧進行初始化。

    Bp<-top of stack

    DI

    SI

    DS

    ES

    DX

    CX

    BX

    AX

    IP

    CS

    PLAGS

    任務中使用的寄存器的數據結構  

    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;

    };

    此結構嚴格按照interrupt函數入口處堆棧的結構定義,初始化時,將結構中的代碼段(CS),指令指針(IP)設置成構成此任務的函數的段地址和偏移地址。

    用于任務管理的數據結構  

    struct task_struct{

    unsigned sp;

    unsigned ss;

    unsigned char *stck;

    unsigned LastTask;

    unsigned IntNum;

    unsigned Status;

    } 

    當執行任務切換時,sp和ss保存當前棧指針和堆棧段地址,而任務調度程序將當前棧指針(_SP)和棧地址(_SS)設置成下一個將要執行的任務的棧指針和棧地址,當調度程序結束運行時,由于從棧中彈出的各個寄存器,包括代碼段和指令指針都是指向新任務的,因此,新任務將自動運行,從而達到任務切換的目的。

    2.3應用多任務調度功能實現對中斷的仿真處理

    由于被測試的用戶源程序是工作在仿真環境下,無法接收硬件產生的中斷信號從而自動執行相應的中斷服務程序。因此,改編后的程序應該能夠定期檢查是否有從仿真軟件發過來的中斷信號,若有,則中斷當前程序的執行,轉入相應的中斷服務函數執行。

    因為用戶的程序當中顯式地設置中斷向量,在改寫用戶的程序時,將每個中斷服務函數入口都置于一個向量數組當中,此數組即為全局中斷向量表,將任務號與相應的中斷號一一對應。

    當時鐘中斷觸發任務調度程序時,調度程序首先檢測由仿真軟件發來的中斷信號,如果有,則調度程序在當前運行的任務的數據結構中保存堆棧段段地址寄存器(_SS)、棧指針寄存器(_SP)、當前任務號,并將堆棧段段地址寄存器和棧指針寄存器設置成新的中斷服務程序所在的任務的相應的值,使得當調度程序返回時,能夠從新的任務開始運行。然后生成一個新的任務,在此任務當中調度對應于此中斷號的中斷服務程序這樣就可以實現中斷功能。

    3.基于Windows多線程環境的系統模型

    3.1實現原理

    考慮部分由C語言編寫的實時嵌入式程序經過適當的修改可以由VC編譯后,在Windows環境中運行。因此可以利用Windows的多線程特性構造系統模型:把用戶的主函數放在系統初始化時生成的一個主線程當中運行,同時,系統主函數監測由Socket端口發來的數據,如果是一個中斷產生信號,系統主函數掛起當前正在執行的線程,新生成一個新的線程,并在新線程中執行相應的中斷服務函數。

    3.2系統的結構

    由于CSocket類不能夠由各個線程之間共享,而各個線程內部又要通過Socket端口接收和發送數據,因此應建立高效而又防止各線程之間沖突的機制,下面是系統的結構圖:  

    當線程需要通過Socket接口收發數據時,首先檢測/設置相應函數的信號量,若此資源不能使用,則線程被自動掛起。系統的主調函數負責輪詢來自Socket接口的數據以及各個信號量資源,當資源可用時,喚醒相應的線程,完成其請求的操作。如果接收到中斷產生信號,則生成新的線程,并掛起當前的線程,從而完成對中斷請求的響應。

    4.結束語

    本文介紹了針對實時嵌入式軟件的測試工具的研究與完善工作,根據不同的軟件特點,構造了兩種系統模型。通過實際的使用,都達到了比較滿意的結果。這兩種系統模型經過適當的修改,可以應用在其它語言編寫的軟件上,從而可以實現通用的模塊功能。
    本文地址:http://www.portaltwn.com/thread-30048-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • EtherCAT®和Microchip LAN925x從站控制器介紹培訓教程
    • MPLAB®模擬設計器——在線電源解決方案,加速設計
    • 讓您的模擬設計靈感,化為觸手可及的現實
    • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
    • 貿澤電子(Mouser)專區

    相關在線工具

    相關視頻

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷