在Simulink环境外构建集成代码金宝app
识别在外部构建过程中调用生成代码所需的文件和接口。
学习如何:
收集在Simulink®之外构建集成代码所需的文件。金宝app
与外部变量和函数的接口。
有关示例模型和相关示例的信息,请参见从嵌入式系统的控制算法生成C代码.
收集和构建所需的数据和文件
Embedded Coder®生成的代码需要MathWorks®提供的支持文件。金宝app要将生成的代码重新定位到另一个开发环境,例如专用的构建系统,您必须重新定位这些支持文件。金宝app方法将这些文件打包到zip文件中packNGo
实用程序。此实用程序查找并打包构建可执行映像所需的文件。该实用程序使用工具在代码生成后自定义构建过程,其中包括buildinfo_data
结构和一个packNGo
函数。类中标识的外部文件包括代码生成>自定义代码窗格中的“模型配置参数”对话框。该实用程序保存buildinfo
中的mat文件模型
_ert_rtw
文件夹中。
打开示例模型,rtwdemo_PCG_Eval_P5
.
该模型被配置为运行packNGo
代码生成后。
手动生成zip文件:
加载文件
buildInfo.mat
(位于rtwdemo_PCG_Eval_P5_ert_rtw
子文件夹)。在命令提示符下,输入命令
packNGo (buildInfo)
.
zip文件中的文件数量取决于Embedded Coder®的版本和所使用的模型的配置。编译器可能需要zip文件中的一个文件子集。编译后的可执行文件大小(RAM/ROM)取决于链接过程。链接器可能只包含必要的目标文件。
将生成的代码集成到现有系统中
这个例子展示了如何将生成的代码集成到现有的代码库中。该示例使用Eclipse™IDE和Cygwin™/gcc编译器。所需的集成任务对于集成环境是通用的。
集成环境概述
一个完整的嵌入式控制系统由多个硬件和软件组成。控制算法只是一种类型的组件。其他组件可以是:
操作系统(OS)
调度层
物理硬件I/O
底层硬件设备驱动程序
通常,您不会在这些组件中使用生成的代码。相反,生成的代码包括与这些组件连接的接口。MathWorks®为许多常见的嵌入式控制器提供了硬件接口块库。有关示例,请参见Embedded Targets块库。
这个例子提供了一些文件来展示如何构建一个完整的系统。主文件是example_main.c
,其中包含一个简单的main函数,只执行基本的操作来练习代码。
文件:
定义函数接口(函数原型)。
包括声明外部数据的文件。
定义了
走读生
数据。初始化数据。
调用模拟硬件。
调用算法函数。
功能执行的顺序与测试集模型中子系统执行的顺序相匹配rtwdemo_PCG_Eval_P5.h
.如果你改变了执行的顺序example_main.c
,可执行图像产生的结果与仿真结果不同。
匹配系统接口
集成需要匹配数据而且函数生成的代码和现有系统代码的接口。在本例中,example_main.c
文件通过导入和导出数据# include
语句和走读生
声明。该文件还从生成的代码中调用函数。
连接输入数据
系统有三个输入信号:pos_rqst
,fbk_1
,fbk_2
.生成的代码通过直接引用导入的全局变量(存储类)访问两个反馈信号ImportedExtern
).代码通过导入的指针(存储类)访问位置信号ImportedExternPointer
).
手写文件defineImportedData.c
定义变量和指针。生成的代码不定义变量和指针,因为手写代码定义了它们。相反,生成的代码声明导入的数据(走读生
)在档案内rtwdemo_PCG_Eval_P5_Private.h
.在实际系统中,数据通常来自其他软件组件或硬件设备。
视图rtwdemo_PCG_Eval_P5_Private.h
.
连接输出数据
在本例中,您不访问系统的输出数据。这个例子测试生成的代码说明如何将输出数据保存到标准日志文件。您可以通过引用该文件来访问输出数据rtwdemo_PCG_Eval_P5.h
.
访问其他数据
生成的代码包含几个存储常用数据的结构,包括:
块状态值(积分器、传递函数)
本地参数
时间
下表列出了常用的数据结构。根据模型的配置,这些结构的组合将出现在生成的代码中。数据在文件中声明rtwdemo_PCG_Eval_P5.h
,但在本例中,您不访问此数据。
数据类型数据名称数据用途
常量|model_cP|常量参数|model_cB|固定块I/O输出|model_U|根和原子子系统输入输出|model_Y|根和原子子系统输出内部数据|model_B|块输出值内部数据|model_D|状态信息向量内部数据|model_M|时间和其他系统级数据内部数据|model_Zero|过零参数|model_P|参数
匹配函数调用接口
默认情况下,代码生成器生成的函数具有无效
函数
(空白)
接口。如果您将模型或原子子系统配置为生成可重入代码,代码生成器将创建更复杂的函数原型。在本例中,example_main
函数使用有效的输入参数调用生成的函数。
调用函数PI_Cntrl_Reusable
使用独立的非结构化全局变量和Simulink®Coder™数据结构的混合。金宝app手写代码定义了这些变量。结构类型定义在rtwdemo_PCG_Eval_P5.h
.
在Eclipse™环境中构建项目
本示例使用Eclipse™IDE和Cygwin™GCC调试器构建嵌入式系统。该示例提供了两个程序的安装文件。软件组件和版本号如下:
Eclipse™SDK 3.2
Eclipse™CDT 3.3
Cygwin™/ GCC 3.4.4-1
Cygwin™/ GDB 20060706 - 2所示
要安装和使用Eclipse™和GCC,请参见安装和使用Cygwin和Eclipse.
你可以通过点击这个超链接来安装这个例子中的文件:
或者,手动安装文件:
创建构建文件夹(
Eclipse_Build_P5
).解压缩文件
rtwdemo_PCG_Eval_P5.zip
进入构建文件夹。删除文件
rtwdemo_PCG_Eval_P5.c
,ert_main.c
而且rt_logging.c
,则由example_main.c
.
您可以使用Eclipse™调试器逐级检查和评估生成的C代码的执行行为。参见示例安装和使用Cygwin和Eclipse.
要使用输入数据练习模型,请参见测试生成的代码.
相关的话题
相关的话题
- 构建过程定制(金宝app仿真软件编码器)
- 自定义代码生成后构建处理
- 使用rtwmakecfg。m API自定义生成的Makefiles
- 将代码重新定位到另一个开发环境