Embedded Coder? 生成的代碼需要 MathWorks? 提供的支持文件。要將生成的代碼轉移到另一個開發(fā)環(huán)境(如專用編譯系統(tǒng))中,您必須轉移這些支持文件。您可以使用 packNGo
實用工具將這些文件打包成一個 zip 文件。該實用工具會查找您編譯可執(zhí)行映像文件所需的文件并將這些文件打包。該實用工具使用工具來自定義代碼生成后的編譯過程,其中包括 buildinfo_data
結構體和 packNGo
函數。這些文件包括您在 Model Configuration Parameters 對話框的 Code Generation > Custom Code 窗格中標識的外部文件。該實用工具將 buildinfo
MAT 文件保存在 model_ert_rtw
文件夾中。
打開示例模型 rtwdemo_PCG_Eval_P5
。
該模型配置為在代碼生成后運行 packNGo
。
要手動生成 zip 文件,請執(zhí)行下列操作:
加載文件 buildInfo.mat
(位于 rtwdemo_PCG_Eval_P5_ert_rtw
子文件夾中)。
在命令提示符下,輸入命令 packNGo(buildInfo)
。
zip 文件中的文件數量取決于 Embedded Coder? 的版本以及您使用的模型的配置。編譯器可能需要 zip 文件中的部分文件。編譯的可執(zhí)行文件的大小 (RAM/ROM) 取決于鏈接過程。鏈接器很可能只包含必要的目標文件。
此示例說明如何將生成的代碼集成到現(xiàn)有代碼庫中。該示例使用 Eclipse? IDE 和 Cygwin?/gcc 編譯器。所需的集成任務對于集成環(huán)境是通用的。
完整的嵌入式控制系統(tǒng)由多個硬件和軟件組件組成??刂扑惴ㄖ皇且环N類型的組件。其他組件可以是:
操作系統(tǒng) (OS)
調度層
物理硬件 I/O
低級硬件設備驅動程序
通常,您不會在這些組件中使用生成的代碼。但是,生成的代碼包含用于連接這些組件的接口。MathWorks? 為許多常見的嵌入式控制器提供了硬件接口模塊庫。有關示例,請參閱 Embedded Targets 模塊庫。
此示例提供了說明如何編譯完整系統(tǒng)的文件。主文件是 example_main.c
,其中包含一個簡單的主函數,該主函數只執(zhí)行基本操作來運行代碼。
文件:
定義函數接口(函數原型)。
包括聲明外部數據的文件。
定義 extern
數據。
初始化數據。
調用仿真硬件。
調用算法函數。
函數執(zhí)行順序與測試框架模型中和 rtwdemo_PCG_Eval_P5.h
中的子系統(tǒng)執(zhí)行順序相匹配。如果在 example_main.c
中更改執(zhí)行順序,可執(zhí)行映像文件產生的結果會與仿真結果不同。
要進行集成,需要對生成的代碼和現(xiàn)有系統(tǒng)代碼的數據和函數接口進行匹配。在此示例中,example_main.c
文件通過 #include
語句和 extern
聲明導入和導出數據。該文件還從生成的代碼中調用函數。
系統(tǒng)有三個輸入信號:pos_rqst
、fbk_1
和 fbk_2
。生成的代碼通過直接引用導入的全局變量(存儲類 ImportedExtern
)訪問兩個反饋信號。代碼通過導入的指針(存儲類 ImportedExternPointer
)訪問位置信號。
人工文件 defineImportedData.c
定義變量和指針。生成的代碼不定義變量和指針,因為它們由人工代碼定義。但是,生成的代碼在文件 rtwdemo_PCG_Eval_P5_Private.h
中聲明導入的數據 (extern
)。在實際系統(tǒng)中,數據通常來自其他軟件組件或硬件設備。
查看 rtwdemo_PCG_Eval_P5_Private.h
。
在此示例中,您不需要直接訪問系統(tǒng)的輸出數據。示例 測試生成的代碼 顯示如何將輸出數據保存到一個標準的日志文件。您可以通過引用文件 rtwdemo_PCG_Eval_P5.h
來訪問輸出數據。
生成的代碼包含存儲常用數據的幾個結構體,這些數據包括:
模塊狀態(tài)值(積分器、傳遞函數)
局部參數
時間
下表列出了常用數據結構體。根據模型的配置,生成的代碼中將顯示這些結構體的某種組合。數據在文件 rtwdemo_PCG_Eval_P5.h
中進行聲明,但在此示例中,您不會訪問這些數據。
Data Type Data Name Data Purpose
Constants |model_cP| Constant parametersConstants |model_cB| Constant block I/OOutput |model_U| Root and atomic subsystem inputOutput |model_Y| Root and atomic subsystem outputInternal data |model_B| Value of block outputInternal data |model_D| State information vectorsInternal data |model_M| Time and other system level dataInternal data |model_Zero| Zero-crossingsParameters |model_P| Parameters
默認情況下,代碼生成器生成的函數有一個 void Func(void)
接口。如果將模型或原子子系統(tǒng)配置為生成可重入代碼,則代碼生成器會創(chuàng)建更復雜的函數原型。在本示例中,example_main
函數使用有效的輸入參數調用生成的函數。
調用函數 PI_Cntrl_Reusable
需要混合使用單獨的、非結構化的全局變量和 Simulink? Coder? 數據結構體。這些變量由人工代碼定義。結構體類型在 rtwdemo_PCG_Eval_P5.h
中定義。
本示例使用 Eclipse? IDE 和 Cygwin? GCC 調試器編譯嵌入式系統(tǒng)。示例提供了針對這兩個程序的安裝文件。軟件組件和版本號為:
Eclipse? SDK 3.2
Eclipse? CDT 3.3
Cygwin?/GCC 3.4.4-1
Cygwin?/GDB 20060706-2
要安裝和使用 Eclipse? 及 GCC,請參閱 安裝和使用 Cygwin 及 Eclipse。
您可以通過點擊以下超鏈接為此示例安裝文件:
或者,通過執(zhí)行下列操作手動安裝文件:
創(chuàng)建編譯文件夾 (Eclipse_Build_P5
)。
將文件 rtwdemo_PCG_Eval_P5.zip
解壓縮到編譯文件夾中。
刪除文件 rtwdemo_PCG_Eval_P5.c
、ert_main.c
和 rt_logging.c
,它們由 example_main.c
替換。
您可以使用 Eclipse? 調試器來詳細了解和評估生成的 C 代碼的執(zhí)行行為。請參閱示例 安裝和使用 Cygwin 及 Eclipse。
要使用輸入數據運行模型,請參閱 測試生成的代碼。
聯(lián)系客服