之间交换结构化和枚举数据生成和外部代码
这个例子展示了如何生成的代码与外部交换数据时,现有的代码。构建和配置模型与外部代码匹配的数据类型,并避免重复类型定义和内存分配(全局变量的定义)。然后,编译生成的代码与外部代码到一个应用程序。
检查外部代码
创建文件ex_cc_algorithm.c
在当前文件夹。
# include“ex_cc_algorithm。h”inSigs_T inSigs;如果(inSigs float_32 my_alg (void) {。呃= = TMP_HI){返回27.5;如果(inSigs}其他。犯错== TMP_LO) { return inSigs.sig1 * calPrms.cal3; } else { return inSigs.sig2 * calPrms.cal3; } }
C代码定义了一个全局结构变量命名inSigs
。代码还定义了一个函数,my_alg
,它使用inSigs
和另一个结构变量命名calPrms
。
创建文件ex_cc_algorithm.h
在当前文件夹。
ifndef ex_cc_algorithm_h # define ex_cc_algorithm_h typedef float_32浮动;typedef enum {TMP_HI = 0, TMP_LO,规范}err_T;typedef struct inSigs_tag {err_T犯错;float_32 sig1;float_32 sig2;}inSigs_T;typedef struct calPrms_tag {float_32 cal1;float_32 cal2;float_32 cal3;}calPrms_T; extern calPrms_T calPrms; extern inSigs_T inSigs; float_32 my_alg(void); #endif
该文件定义了float_32
作为C数据类型的别名浮动
。该文件还定义了枚举数据类型,err_T
两种结构类型,inSigs_T
和calPrms_T
。
这个函数my_alg
是用来计算返回值通过使用领域的inSigs
和calPrms
,这是全球结构变量的类型inSigs_T
和calPrms_T
。函数需要另一个算法来提供信号数据inSigs
商店。
这段代码分配内存inSigs
,但不是calPrms
。创建一个模型,其生成的代码:
定义并初始化
calPrms
。计算字段的值
inSigs
。重用类型定义(如
err_T
和float_32
外部代码定义)。
创建金宝app模型
这样你可以创建枚举和仿真软件的结构化数据金宝app®模型中,首先创建的模型表示外部代码定义的金宝app数据类型。模型类型存储在一个新金宝app的数据字典命名
ex_cc_integ.sldd
。金宝appSimulink.importExternalCTypes (“ex_cc_algorithm.h”,…“DataDictionary”,“ex_cc_integ.sldd”);
数据字典出现在当前文件夹。
在Model Explorer检查字典内容,在当前文件夹,双击这个文件,
ex_cc_integ.sldd
。的
金宝appSimulink.importExternalCTypes
函数创建金宝appSimulink.Bus
,金宝appSimulink.AliasType
,金宝appSimulink.data.dictionary.EnumTypeDefinition
对应于自定义C数据类型的对象ex_cc_algorithm.h
。创建一个新的模型,并将其保存在当前文件夹
ex_struct_enum_integ
。链接模型的数据字典。在建模选项卡,在设计,点击链接到数据字典。
添加算法块计算领域
inSigs
。
现在您已经算法模型,您必须:
组织输出信号到一个结构变量命名
inSigs
。创建结构变量
calPrms
。包括
ex_cc_algorithm.c
构建过程中编译后代码生成的代码。
配置生成的代码编写输出数据对现有结构变量
添加一个总线的创造者附近街区现有外港块。的输出总线的创造者块是一个总线信号,您可以配置出现在生成的代码结构。
在总线的创造者块,设置这些参数:
输入数量来
3
输出数据类型来
总线:inSigs_T
输出作为nonvirtual总线到所选
删除现有的三个外港块(而不是信号输入模块)。
把剩下的三线的输入信号总线的创造者块。
添加一个外港块后总线的创造者块。连接的输出总线的创造者到外港。
在外港块,设置数据类型参数
总线:inSigs_T
。在建模选项卡上,单击模型数据编辑器。
在港口/外港选项卡,轮廓尺寸块标记
In2
和In3
,改变数据类型从继承:汽车
来float_32
。为外港块,设置信号的名字来
inSigs
。打开嵌入式编码器的应用,应用程序画廊,下代码生成,点击嵌入式编码器。的C代码选项卡打开。
打开代码映射编辑器。选择代码接口>单个元素的代码映射
在外港选项卡上,选择行输出港。集存储类来
ImportFromFile
。单击并设置头文件来
ex_cc_algorithm.h
。在模型中,选择的输出信号多端口切换块。
在模型数据编辑器中,选择的信号,设置的名字来
犯错
。设置的输出信号的名称获得块
sig1
。设置的输出信号的名称Gain1块
sig2
。
当你完成时,该模型将输出信号数据存储(如信号犯错
和sig1
)领域的一个结构变量命名inSigs
。
因为你设置存储类来ImportFromFile
,生成的代码并不分配内存inSigs
。
配置生成的代码定义参数数据
配置生成的代码定义全局结构变量,calPrms
,外部代码的需要。
在模型浏览器中模型层次结构窗格中,在字典节点ex_cc_integ,选择设计数据节点。
在内容窗格中,选择
金宝appSimulink.Bus
对象命名calPrms_T
。在对话框中窗格(右窗格),点击发射类型编辑器。
在类型编辑器中,选择
calPrms_T
。在将来发布类型编辑,单击金宝app模型参数。
在MATLAB®编辑,复制生成的MATLAB代码并在命令提示符运行代码。的代码创建了一个
金宝appSimulink.Parameter
对象的基本工作空间。在模型浏览器中模型层次结构窗格中,选择基本工作空间。
使用Model Explorer来移动参数对象,
calPrms_T_Param
,从基本工作空间的设计数据部分数据字典。选择的数据字典中内容窗格中,重命名对象作为参数
calPrms
。在模型数据编辑器中,选择参数选项卡。
为获得块,取代的价值
13.8900013
与calPrms.cal1
。在另一个获得块,用
calPrms.cal2
。在编辑的价值获得块,旁边
calPrms.cal2
,点击操作按钮并选择calPrms>开放。在
calPrms
属性对话框,旁边价值框,点击操作按钮并选择打开变量编辑器。使用变量编辑器来设置参数对象的字段值。
的字段
cal1
和cal2
,使用的数值获得在以前所使用的模型。为
cal3
,用一个非零数字等15.2299995
。
当你完成时,关闭变量编辑器。
在属性对话框中,设置存储类来
ExportedGlobal
。点击好吧。使用Model Explorer来保存更改你的字典。
生成、编译和检查代码
包括配置模型
ex_cc_algorithm.c
在构建过程。集配置参数>代码生成>自定义代码>代码信息>源文件来ex_cc_algorithm.c
。从模型中生成代码。
检查生成的文件
ex_struct_enum_integ.c
。文件定义和初始化calPrms
。* / / *导出块参数calPrms_T calPrms = {15.23 0.998300076 13.8900013 f, f, f};/ *变量:calPrms
该算法领域的计算和存储数据
inSig
。
在模型代替数据类型名称
生成的代码使用float_32
而不是默认的,real32_T
,而不是手动指定数据类型的块输出信号和汽车元素,您可以使用数据类型替换(配置参数>代码生成>数据类型替换)。有关更多信息,请参见更换和重命名模型符合编码标准编码器数据金宝app类型。
另请参阅
金宝appSimulink.importExternalCTypes