精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

模擬設備驅動

Xilinx賽靈思官微 ? 來源:djl ? 作者:Neil Johnson Soheil S ? 2019-07-24 15:19 ? 次閱讀

模擬(Mocking)是嵌入式系統開中用于單元測試和測試驅動的一種技術。模擬的好處在于通過刪除不相關的從屬代碼,它允許開發者很容易地隔離和單元測試其中一部分代碼。在嵌入式系統中,這些從屬代碼可能被當作由設備驅動和硬件運行的功能集合而存在。在這篇博客中,我們將討論關于模擬設備驅動和硬件以及使用GoogleTest和GoogleMock來測試應用程序代碼

在我們的例子中,目標硬件是Zynq-7000 SoC的ZedBoard。之所以挑選Zedboard是因為它有大量擁躉和很多簡便可用的參考設計。不過其不足是,一板難求!——由于需求量大,這塊開發板的運送時間超過2個月。不過目標硬件送達延遲對嵌入式開發者來說是個普遍問題。沒有目標硬件,嵌入式開發者通常只有兩種選擇:

等待,或…

在沒有硬件的情況下開發并測試高質量應用

我們的選擇是不等待:-)

我們的應用是一個視頻演示平臺。在這個平臺上,Zynq SoC中ARM Cortex-A9 MPCore CPU上運行的軟件創建一系列視頻幀,將它們通過由Xilinx IP核組建的硬件流水線傳輸到HDMI視頻輸出。我們的目的就是通過模擬設備驅動來寫入和測試整個應用程序。然后,當收到ZedBoard后,我們就可以用真正的設備驅動來重新部署我們的應用了。

模擬設備驅動功能

我們選擇一個對我們單元測試很好的粒度(granularity)水平,因此我們能夠從一系列很小的步驟開始建立和測試我們的應用程序, 每一步測試完畢后再進行下一步。例如,軟件功能是用xiic_l.中的Xiic_DynInit()函數對目標硬件I2C 控制器基地址進行適當的初始化。

模擬設備驅動

為了模擬像Xiic_DynInit()這樣的設備驅動程序,我們的應用包含賽靈思設備驅動頭文件xiic_l.h,正如你通常做的一樣。然后我們新建我們自己的該函數實現的存根來代替從libxil.a中鏈接真正的設備驅動代碼。這存根始于空的實現體,由此我們可以流水清除Makefile然后build,確保編譯器和鏈接器都沒問題(大多數有經驗的開發者也許不會有這個習慣,但是這是個開始階段,我們覺得有幫助)。

模擬設備驅動

下一步是在存根下插入真正的功能,我可以使用這些功能來模擬設備驅動的功能。這就是要用到GoogleMock。GoogleMock 是一個C++框架,我們用它來模擬C函數(實際上GoogleMock只是個C++框架,對C++不熟悉的開發者不必為此擔心。所有的事都會由單內襯(one-liner)的宏和函數完成,所以你會感到在沒C++知識下創建和使用模擬也很容易)。

我們選擇模擬GoogleMock中的一些設備驅動,叫做xdriverMock。在xdriverMock中,有我們感興趣的每個函數的聲明。例如 Xiic_DynInit(),我們使用MOCK_METHOD1,用來定義一個輸入變量的函數。(類似的,也有MOCK_METHOD2,MOCK_METHOD3之類的來聲明有任意個輸入變量的函數。)MOCK_METHOD宏定義了很多一般特性使得編寫單元測試和測試相互作用變得非常容易。更多好處還在后面。

模擬設備驅動

作為我們 xdriverMock的一部分,我們也有叫做getXdriverMock()和destroyXdriverMock()的全局函數分別來實例化和析構這個mock對象。如果你熟悉C++,getXdriverMock()和destroyXdriverMock()函數很像是構造函數和析構函數;它們構造一個xdriverMock的實例用于測試,然后析構作為碎片收集。在具體實現的文件里這些方法看上去如下:

模擬設備驅動

這個難題的最后一塊就是調用GoolgeMock來填充Xiic_DynInit()函數的存根應用 。如下所示:

模擬設備驅動

有了這個,我們就成功地用GoogleMock代替了真正設備驅動的功能。對單元測試來說,我們現在有了對設備驅動功能完整的控制,也擺脫了對硬件的依賴。記住我們的首要任務是驗證分配給 I2C控制器的基地址,現在我們可以開始編寫驗證應用程序正常工作的單元測試了。

測試你的第一個功能

為了用我們新的設備驅動模擬器開始編寫測試,我們首先需要建立GoogleTest線束,這相對簡單,涉及新建測試單元實例,叫做licCtrl的類和xdriverMock的一個副本。如果你的測試單元是純粹的C函數而不是像我們這樣的C++類,當然你就只要直接調用C函數,不必管該類實例了。

模擬設備驅動

對單元測試來說,大多數有關GoogleMock的相互作用是通過EXPECT_CALL宏發生的。有了這個宏,我們能夠驗證我們的應用程序滿足所有期望的與設備驅動的相互作用。通常的做法例如,我們的應用程序通過叫做init()的licCtrl的一個成員函數來調用Xiic_DynInit()。確認運行的測試如下:

模擬設備驅動

測試程序的第一行中,我們使用EXPECT_CALL來說明,當測試期間輸入值等于HDMI I2C基地址時,XIic_DynInit()函數應當被調用一次。第二行是調用我們iicCtrl應用代碼里的init()方法。如果init()方法無法用我們期望的地址調用Xiic_DynInit()函數,一個斷言將在該模擬中發生,并且測試以失敗告終。否則,測試通過。

這個測試的模式很通用,這也是我們選擇在這兒展示的原因。不過,你可以設置更為復雜的預期來測試,例如返回值,指針的值和參考變量等等。

這些是使用GoogleMock來模擬設備驅動和模仿與真實硬件間的相互作用,運行于Zynq-7000 SoC 的ARM Cortex-A9 MPCore CPU上的測試應用程序的基本原理。然而這個例子只展示了GoogleMock模擬的一個設備驅動函數,我們有超過75個函數以相同的方式被模擬,以便讓我們在應用程序中運行超過100種測試;全都不用目標硬件。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動
    +關注

    關注

    12

    文章

    1827

    瀏覽量

    85186
  • 模擬
    +關注

    關注

    7

    文章

    1422

    瀏覽量

    83897
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28334
收藏 人收藏

    評論

    相關推薦

    擬設備模擬實體設備和云端通信

    一、虛擬設備是什么?虛擬設備是機智云云端可自動生成的一個仿真智能硬件,可模擬要開發或正在開發的智能硬件,來進行云端設備控制、手機APP控制、上報數據等需求。通常,使用虛
    發表于 02-16 16:55

    模擬設計的原則有哪些

    模擬設計的100條圣經
    發表于 02-25 07:24

    擬設備驅動程序設計開發

     摘  要: 介紹虛擬設備驅動程序開發的基本知識以及VxDs與WIN32應用程序通訊的幾種常用方法,并給出了用VtoolsD開發VxDs的具體實例。     關鍵詞: 虛擬設備,
    發表于 11-18 17:25 ?38次下載

    基于開源虛擬機的模擬設備的設計與實現

    在研究了QEMU虛擬機的工作原理及其I/O框架基礎上,設計并實現了模擬QBUS設備之間,基于socket設備組通信模型,模擬QBUS設備與物
    發表于 10-08 15:09 ?30次下載
    基于開源虛擬機的<b class='flag-5'>模擬設備</b>的設計與實現

    精密模擬設計中的噪聲分析

    精密模擬設計中的噪聲分析
    發表于 01-14 15:09 ?17次下載

    7000應用開發技巧:模擬設備驅動(Mocking)

    模擬設備驅動和硬件以及使用GoogleTest和GoogleMock來測試應用程序代碼。 在我們的例子中
    發表于 02-09 06:36 ?508次閱讀
    7000應用開發技巧:<b class='flag-5'>模擬設備</b><b class='flag-5'>驅動</b>(Mocking)

    模擬設備高速轉換器

    模擬設備高速轉換器(HSC)接口板設計用于Eval控制為模擬器件的高速CMOS a/D轉換器提供完整的評估系統。HSC接口板用作高速緩沖器用于以高達50 MHz的速率捕獲數字數據的內存來自大多數模擬設備的HSC評估板。然后將捕獲
    發表于 07-18 16:51 ?13次下載

    TI各種模擬設計工具介紹

    TI各種模擬設計工具介紹
    發表于 10-16 12:56 ?7次下載
    TI各種<b class='flag-5'>模擬設</b>計工具介紹

    Cadence教程之如何使用VieloSo模擬設計環境進行設計

    本手冊描述如何使用VieloSo模擬設計環境來模擬模擬設計。VieloSo模擬設計環境被記錄在一系列在線手冊中。下面的文件給你更多的信息。 FieloSo高級分析工具用戶指南提供有關蒙
    發表于 09-20 08:00 ?0次下載
    Cadence教程之如何使用VieloSo<b class='flag-5'>模擬設</b>計環境進行設計

    PSoC Creator模擬設計:如何解決模擬電壓問題

    本視頻介紹了采用PSoC Creator進行模擬設計的各種技巧和注意事項。
    的頭像 發表于 07-01 12:16 ?2090次閱讀

    PSoC Creator模擬設計:Analog Device Viewer

    本視頻介紹了采用PSoC Creator進行模擬設計的各種技巧和注意事項。
    的頭像 發表于 07-01 12:41 ?2994次閱讀

    PSoC Creator模擬設計:引腳放置的模擬及注意事項

    本視頻介紹了采用PSoC Creator進行模擬設計的各種技巧和注意事項。
    的頭像 發表于 07-01 12:04 ?3627次閱讀

    AN639:模擬設備能耗(ADE)產品:常見問題

    AN639:模擬設備能耗(ADE)產品:常見問題
    發表于 04-24 14:32 ?2次下載
    AN639:<b class='flag-5'>模擬設備</b>能耗(ADE)產品:常見問題

    EE-74:模擬設備串行端口開發和故障排除指南

    EE-74:模擬設備串行端口開發和故障排除指南
    發表于 04-27 09:58 ?2次下載
    EE-74:<b class='flag-5'>模擬設備</b>串行端口開發和故障排除指南

    理解機智云虛擬設備與實際設備的關系

    在使用機智云平臺進行設備管理和應用開發時,用戶常常會遇到虛擬設備無法控制實際設備的問題。這種情況的根源在于虛擬設備的本質和功能定位。Q虛擬設備
    的頭像 發表于 09-22 08:02 ?189次閱讀
    理解機智云虛<b class='flag-5'>擬設備</b>與實際<b class='flag-5'>設備</b>的關系