搜尋

會員登入

搜尋

導覽

會員
廣告
廣告

在嵌入式Linux硬體上執行處理器迴圈模擬

瀏覽次數:12598

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

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

PIL處理概述

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

PIL處理概述
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)。

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

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

工具鏈資料指定了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 下載。

稀土棋局下的台灣解方:從供應鏈韌性看關鍵礦物合作新契機
特別企劃半導體

稀土棋局下的台灣解方:從供應鏈韌性看關鍵礦物合作新契機

稀土與關鍵礦物已成全球科技競爭與經濟安全的重要戰略資源。面對供應鏈高度集中與地緣風險升高,台灣如何透過國際合作、技術替代、戰略儲備與城市採礦,建立自主且具韌性的關鍵礦物供應體系?

稀土與關鍵礦物已成全球科技競爭與經濟安全的重要戰略資源。面對供應鏈高度集中與地緣風險升高,台灣如何透過國際合作、技術替代、戰略儲備與城市採礦,建立自主且具韌性的關鍵礦物供應體系?