<li id="wkceg"></li>
<rt id="wkceg"><delect id="wkceg"></delect></rt>
<bdo id="wkceg"></bdo>
<strike id="wkceg"><acronym id="wkceg"></acronym></strike>

  • 帳號:
    密碼:
    智動化 / 文章 /

    在嵌入式Linux硬體上執行處理器迴圈模擬
    [作者 Lars Rosqvist等人]   2017年11月17日 星期五 瀏覽人次: [11449]


    進行處理器迴圈(processor-in-the-loop,PIL)模擬時,從Simulink模型產生的程式碼可直接在目標硬體上執行,代表著可以利用與主機相同的測試案例在硬體上測試模型。PIL測試是為了要揭露在嵌入式環境上執行發生的問題而設計,比如,你的控制迴圈是否符合嵌入式處理器的可執行時間?


    本文將以Raspberry Pi為例,介紹一個以Simulink支援的客製目標硬體為基礎的PIL測試工作流程,並示範如何實現一個客製的工具鏈讓編譯及連結變得更容易。(註)


    PIL處理概述

    PIL模擬讓人可以自動地在目標硬體下載與執行測試。圖1簡要說明了這些步驟。開始模擬時,先從模型?動程式碼生成。再從工具鏈(toolchain)中的工具鏈資料(toolchaininfo)自動編譯及連結程式碼之後,模擬便在目標硬體下載及啟動執行檔。接下來,還能在MATLAB分析測試結果。



    圖1 : PIL處理概述
    圖1 : PIL處理概述

    開發PIL架構

    Simulink內建了建立客製化PIL實現的支援。我們將進行以下幾個步驟來建立一個客製的PIL架構:


    1.實現一個連接架構類別


    2.註冊該連接架構


    Raspberry Pi的PIL執行範例的資料夾結構是這樣的:


    實現連接架構

    連接架構就是用來指定所有需要在PIL上執行的動作的地方。它收集了建構器(builder)、發射器(launcher)、通訊器(communicator)的實例。


    本連接架構類別進行下列幾個動作:


    1.設置目標通訊

    目標應用架構類別,TargetApplicationFramework,裝配了目標端的通訊驅動。它建立一個具備PIL限定檔案的BUILDINFO物件,資料夾內的main.c檔之後將被合併到PIL元件庫來建立PIL應用。


    這個架構類別的第一個動作是要實現一個呼叫超類別的結構,rtw.pil.RtIOStreamApplicationFramework。在這之後,新增一個主要的檔案以及其它通訊中必要的檔案。


    在這個Raspberry Pi範例,我們增加了利用TCP/IP進行通訊所需要的檔案。


    2.建構器實例化

    本建構器是透過呼叫超類別的rtw.connectivity.MakefileBuilder來實例化。


    3.發射器實例化

    在發射器的類別,Launcher,支援開始及終止與建構器物件關聯的應用程式,必須包含兩種方法:startApplication和stopApplication。


    這個發射器實例化了結構中的超類別 rtw.connectivity.Launcher。


    在Raspberry Pi的範例,我們已經利用第三方工具把Launcher連到硬體。為了讓範例更簡單一點,我們也下載了startApplication中的應用。


    4.設置主通訊

    如果通訊協定是TCP/IP或串列通訊,可以把現有的函式庫檔案用在主通訊,如果是其他的協定,可以執行自有的rtiostream。由於rtiostream函式的API設計是獨立於資料傳送目的地的實體層,它可以被客製化來管理其他的通訊。


    在範例中,我們採用TCP/IP作為通訊協定,並重複利用MATLAB TCP/IP函式庫libmwrtiostreamtcpip。


    5.呼叫超類別結構來註冊元件

    接著到了呼叫超類別結構並將建構器、發射器及主通訊物件傳送到rtw.connectivity.Config的時候了。


    6.註冊一個特定硬體的計時器

    執行PIL模擬的其中一項優點,就是可以在目標取得一個執行檔。若要進行這個動作,必須在結構類別註冊一個特定硬體的計時器。以Raspberry Pi來說,計時器已經被包在rtlib函式庫。我們只需要利用程式碼替換表來替換code_profile_read_timer函式。


    註冊連接

    為了要使用新的PIL架構,我們已經把它註冊在一個sl_customization.m檔。


    這個連接結構是透過呼叫registerTargetInfo來註冊的。一個連接結構需要具備一個獨特的名字,並且關聯到已開發好的連接實現類別,ConnectivityConfig。結構的屬性定義了系統目標檔案,toolchain,及與連接實現類別相容的硬體。


    在Raspberry Pi的範例,系統目標檔案必須設定到嵌入式程式碼轉碼器(Embedded Coder),而且工具鏈(toolchain)必須為Raspberry Pi toolchain。


    開發一個客製工具鏈

    工具鏈收集了在編譯、連結、下載、在特定平臺上執行所需要的各項工具。客製的工具鏈簡化了編譯到可執行的工作。透過工具鏈,不需要建立一個makefile的模板;makefile是藉由工具鏈中指定的資料來建立。客製工具鏈在編譯、鏈接、歸檔的整合變得更快又更簡單。


    我們可以很容易地在模型結構設定選擇一個客製工具鏈(圖2)。



    圖2 : 透過工具鏈選擇的模型結構設定
    圖2 : 透過工具鏈選擇的模型結構設定

    當程式碼已經產生並編譯到稍早提到的流程,嵌入式程式碼轉換器便可自動地利用工具鏈資料。


    工具鏈資料指定了makefile如何被建立,包括除錯用的編譯器參數,像是檔案以及副檔名。


    在Raspberry Pi範例所使用的是一個gcc arm-linux cross-compiler來編譯C程式碼。如同之前提到的,我們為了使用到的硬體計時器新增了rtlib 函式庫。當新增了rtlib,可把它寫成lrt。這個工具鏈讓人可以指定用來編譯的工具,並可以依使用案例設定不同的工具鏈參數。舉例來說,可以在”fast runs”或”fast builds”有不同的設定。


    總結與下一步

    現在有了一個PIL架構及一個支援目標硬體的工具鏈,因此可以:


    *在目標硬體直接從Simulink測試演算法。


    *為函式取得執行設定檔。


    *比較模型層級模擬與利用編譯的物建程式碼和目標驅動進行的模擬(對許多安全標準來說是重要的驗證步驟)的結果。


    有了工具鏈,不需要將makefile客製化就可以進行編譯。工具鏈在執行PIL模擬,以及在將模型佈署在嵌入式Linux硬體時都存在著優勢。如果「只要產生程式碼」不在結構設定的程式碼產生標籤,就可以直接為目標硬體建立一個執行檔。


    (本文由鈦思科技提供;作者Lars Rosqvist、Roger Aarenstrup、Kristian Lindqvist任職於MathWorks公司)


    註:本範例所使用的程式碼可從https://www.mathworks.com/matlabcentral/fileexchange/54172-raspberrypipil 下載。


    相關文章
    ? 以3D模擬協助自動駕駛開發
    ? 無線通訊的未來--為無所不在的連接做好準備
    ? 使用深度學習進行地下電纜系統預測性維護
    ? 實用型數位轉型的最佳實踐
    ? 利用類神經網路進行ADC錯誤的後校正
    comments powered by Disqus
      相關新聞
    » 臺達電子公佈一百一十四年六月份營收 單月合併營收新臺幣422.08億元
    » 臺達能源與欣銓科技合作小水力轉供 助半導體大廠布局多元再生能源
    » 臺達攜手珍古德協會與海科館 三方合作推動珊瑚復育教育
    » 嘉義縣以空品監測即時掌控工廠火災應變措施
    » 裕民航運聚焦於淨零轉型與全球布局 以營運韌性拓展綠色未來
      相關產品
    » 泓格iSN-811C-MTCP紅外線感測模組 從溫度掌握工業製造的安全與先機
    » 凌華科技透過 NVIDIA JetPack 6.1 增強邊緣 AI 解決方案
    » 安勤推出搭載NVIDIA Jetson平臺邊緣AI方案新系列
    » 臺達全新溫度控制器 DTDM系列實現導體加工精準控溫
    » 西門子推出下一代AI增強型電子系統設計軟體 提升使用者體驗

    ?
    刊登廣告 新聞信箱 讀者信箱 著作權聲明 隱私權聲明 本站介紹

    Copyright ©1999-2025 遠播資訊股份有限公司版權所有 Powered by O3
    地址:臺北數位產業園區(digiBlock Taipei) 103臺北市大同區承德路三段287-2號A棟204室
    電話 (02)2585-5526 #0 轉接至總機 / E-Mail: webmaster@hope.com.tw
    主站蜘蛛池模板: 县级市| 陇川县| 古丈县| 分宜县| 青龙| 安溪县| 固镇县| 昌邑市| 翁源县| 通城县| 金堂县| 宁国市| 福海县| 堆龙德庆县| 多伦县| 布尔津县| 平武县| 两当县| 常熟市| 怀宁县| 萍乡市| 太康县| 渑池县| 体育| 融水| 五峰| 巫山县| 荣成市| 铅山县| 泽州县| 萍乡市| 安泽县| 南投县| 会同县| 潜山县| 岑巩县| 鄂温| 宁南县| 民勤县| 武安市| 金沙县|