<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設(shè)計應(yīng)用 > 基于Proemulator的插樁構(gòu)架研究

          基于Proemulator的插樁構(gòu)架研究

          作者: 時間:2017-02-27 來源:網(wǎng)絡(luò) 收藏
          0引 言

          由于目標(biāo)機與宿主機處理器體系結(jié)構(gòu)不同,嵌入式軟件無法在宿主機上直接運行與測試,因此嵌入式軟件的開發(fā)過程常常比硬件開發(fā)過程還要漫長,導(dǎo)致整個系統(tǒng)開發(fā)周期長,軟件功能調(diào)試和性能測試不能及時完成,軟件質(zhì)量無法保證。嵌入式模擬器能良好地解決這一問題。

          將模擬器應(yīng)用到嵌入式軟件的開發(fā)與測試中,其優(yōu)點有如下幾個方面:

          (1)采用模擬器進行嵌入式開發(fā)與測試能讓軟件和硬件開發(fā)同步進行,縮短開發(fā)周期;

          (2)能提供比真正硬件環(huán)境下更豐富的測試環(huán)境,拓寬測試范圍;能進行長時間的測試,甚至能在真實硬件不能承受的“危險”條件下測試。

          (3)能提供調(diào)試,測試,變量查看,性能分析,實驗數(shù)據(jù)存儲等多種額外功能,便于開發(fā)與測試人員進行分析。

          1國內(nèi)外模擬器相關(guān)研究

          國內(nèi)外已有若干較成熟的嵌入式系統(tǒng)模擬器,如ARM公司的ARMmulator,同濟大學(xué)開發(fā)的Proemulatot中針對ARM芯片的指令模擬器,清華大學(xué)Sky Eye項目中的指令模擬器,Linux上的開源軟件GDB ARMulator。

          Proemulator是一個源碼開放的通用模擬器架構(gòu),能在宿主機上以純軟件方式模擬各種硬件設(shè)備(包括CPU、輸入/輸出設(shè)備等),也可以模擬由這些設(shè)備組成的單片機或嵌入式系統(tǒng)。它基于插件機制,主程序提供整個構(gòu)架,包括運行環(huán)境的建立、代碼的裝載和運行時內(nèi)存、寄存器、端口的查看界面等,而插件負責(zé)模擬不同硬件設(shè)備的行為和特性,并抽象成一個統(tǒng)一的接口提供給主程序調(diào)用。通過這個機制,模擬新的設(shè)備變得更為容易。Proemutator提供多種CPU插件與若干種片內(nèi)與片外外設(shè),結(jié)構(gòu)圖如圖1所示。



          2 基于嵌入式模擬器的插樁構(gòu)架

          嵌入式測試平臺建立在嵌入式模擬器之上,測試過程中首先對被測程序進行插樁,樁節(jié)點在程序運行過程中能同步的,即時地向樁信息分析器輸出預(yù)設(shè)的樁信息。分析器能實時接收裝數(shù)據(jù),并進行分析,從而得出整個被測程序運行過程中的覆蓋率和分支情況?;谇度胧侥M器的插樁構(gòu)架如圖2所示。


          3 基于Proemulator的插樁構(gòu)架實現(xiàn)

          嵌入式模擬器和樁信息分析器為兩個獨立進程,在兩者之間實現(xiàn)樁數(shù)據(jù)的傳遞,需采用進程間通信機制。常見的進程間通信方法有以下幾種:

          (1)Socket通信是常見的進程間通信方法,它能良好地支持網(wǎng)絡(luò)通信協(xié)議TCP/IP,在進行通信時,需要設(shè)置端口,并通過幾次握手建立TCP連接,因此適合網(wǎng)絡(luò)間的大量數(shù)據(jù)傳輸,而對于單機上的少量多次數(shù)據(jù)傳輸并不合適。

          (2)共享內(nèi)存的方法較為常見,對于每個進程來說,獲得共享內(nèi)存后,就能實現(xiàn)內(nèi)存的讀寫操作。但是如果不進行同步,則一個進程在進行讀的過程中另一個進程進行寫操作,就會造成數(shù)據(jù)的不一致。因此在采用共享內(nèi)存的方法時,需要將共享區(qū)域設(shè)置為臨界資源。常用的方法有信號量機制,兩個進程訪問共享內(nèi)存時,利用P,V操作進行讀寫的互斥。當(dāng)P操作成功時,才能訪問臨界區(qū),訪問完畢后進行V操作,讓出使用權(quán),使得別的進程能夠訪問。共享內(nèi)存的方法適合多個進程間的大量數(shù)據(jù)共享,只要處理好操作的互斥性,該方法非常實用。

          (3)WM COPYDATA消息是Windows底層消息,使用非常方便,只需獲得進行通信的進程的窗口句柄,就能通過SendMessege函數(shù)將數(shù)據(jù)封裝在消息中傳遞給該進程,因為SendMessege函數(shù)在接收進程接到消息后才會返回,因此絕對不會發(fā)生消息丟失的情況,是可靠的通信。接收方只需要處理WM_COPYDATA消息,便能獲得傳遞來的數(shù)據(jù)。當(dāng)然,該方法不能用于網(wǎng)絡(luò)間的傳輸,只能用于單機環(huán)境下的Windows操作系統(tǒng)。還有管道,剪貼板,文件映射等方法,本文不做詳細介紹。下面詳細介紹基于嵌入式模擬器獲取樁數(shù)據(jù)的技術(shù)難點。

          3.1基于Proemulator的插樁構(gòu)架

          Proemulator源碼完全開放,提供了UART插件,對外設(shè)的模擬可以簡化為對端口寄存器的模擬,當(dāng)程序訪問相應(yīng)的端口時,觸發(fā)其對應(yīng)外設(shè)的動作。UART內(nèi)部包括控制口和數(shù)據(jù)口。向控制口寫入工作方式控制字后,訪問數(shù)據(jù)口數(shù)據(jù)能觸發(fā)事件。在被測程序中進行插樁初始化,設(shè)定UART工作方式,在需要插樁的位置將樁數(shù)據(jù)寫入UART數(shù)據(jù)端口,然后在UART插件中將寫入數(shù)據(jù)端口的樁信息使用Windows進程通信機制輸出。

          Proemulator提供了多種串行數(shù)據(jù)重定位的方式來將模擬器內(nèi)部的數(shù)據(jù)信息發(fā)送至外部,包括控制臺、磁盤文件、命名管道和串口。其中命名管道是一種較好的方式,只需編寫自己的管道接收器,就能實時地接收管道發(fā)送出來的樁數(shù)據(jù),使用串口也比較方便。還能在Proemulator中加入共享內(nèi)存,或者發(fā)送WMCOPYDATA消息,基于Proemulator的插樁構(gòu)架如圖3所示。



          3.2插樁構(gòu)架性能分析

          本文實現(xiàn)了基于Proemulator的樁數(shù)據(jù)的發(fā)送與獲取,并進行了分析,見表1。



          4結(jié) 語

          本文提出基于嵌入式模擬器的插樁構(gòu)架,將插樁后的程序經(jīng)編譯生成可執(zhí)行代碼,運行于模擬器上,在運行過程中模擬器能實時地將樁信息發(fā)送到樁信息分析器,進行代碼的白盒測試。本文基于已有的嵌入式模擬器Proemulator實現(xiàn)了樁數(shù)據(jù)獲取?;谇度胧侥M器的插樁架均能即時地進行樁數(shù)據(jù)的發(fā)送接收與分析,能有效進行白盒測試。


          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();