要用您自己的或以自定义方式读写数据的遗留函数来替代对生成代码中的数据的直接访问,您可以在存储类上启用函数访问。您可以在Embedded Coder中创建这些存储类®字典。使用存储类的根级导入、根级输出和模型参数将作为对指定函数的调用出现在生成的代码中。在存储类所指向的单独的头文件和源文件中提供函数声明和定义。
您可以定义一个存储类并将其应用于根级导入、根级输出和模型参数,以便可以通过可定制的方式访问它们得到
和集
功能。这样的定制可能很有用,例如,抽象软件层、从外部文件获得对数据的访问或控制对关键代码部分的访问。
这个例子展示了如何在Embedded Coder Dictionary中设置一个存储类,并在Code Mappings编辑器中将存储类映射到根级的导入/输出端口和模型参数。
打开示例模型rtwdemo_roll
.在MATLAB命令窗口中运行如下命令:
目录(fullfile (docroot,“工具箱”,“是”,“示例”))
得到
和集
功能:
将这些文件保存到本地路径。
在应用程序库中,在代码生成,点击嵌入式编码器.
要打开嵌入式编码器字典,请在C代码选项卡上,单击代码接口>嵌入式编码字典.
的rtwdemo_roll
模型有两个存储类:SignalStruct
和ParamStruct
.它们已经通过使用添加按钮。本例使用了这些存储类。您也可以对创建的存储类执行以下步骤。
为SignalStruct
存储类,在属性检查器窗格,更新以下属性值:
数据访问来函数
头文件来R_Value.h美元
确保访问模式被设置为价值
.数据范围被设置为进口
默认值,不可更改。
为ParamStruct
存储类,在属性检查器窗格,更新以下属性值:
数据访问来函数
头文件来R_Value.h美元
这些属性已经设置好了:
访问模式来价值
数据初始化来静态
用于参数的存储类可以具有数据初始化设置为汽车
,静态
,或没有一个
.
打开“配置参数”对话框。在工具条上,在C代码选项卡上,单击设置.选择代码生成>自定义代码>额外的构建信息>源文件并指定:
rtwdemo_roll_Value.c
在嵌入式编码器应用程序中,打开代码映射编辑器。在数据默认值选项卡,映射这些模型元素类别:
港口来SignalStruct
外港来SignalStruct
模型参数来ParamStruct
构建模型并生成代码。
在生成的代码中,查看该文件rtwdemo_roll.c
.该模型一步
函数使用指定的得到
和集
函数来执行算法。生成的代码通过调用自定义的手写代码来访问遗留数据得到
和集
功能。例如,下面是HDG_Ref导入的代码片段:
if (get_HDG_Mode()){/*输出原子子系统:'/HeadingMode' */ rtb_Sum1 = (get_HDG_Ref() - get_Psi()) * 0.015F * get_TAS();/* output for子系统:' /HeadingMode' */} else {/* output for Atomic子系统:' / rollanglerereference ' */ if ((real32_T)fabs(get_Turn_Knob()) >= 3.0F) {rtb_Sum1 = get_Turn_Knob();}
得到
和集
函数,如果您编写的函数接受并返回期望的值。
要使用指针访问数据,遵循前面所有的步骤,但要做以下更改:
在嵌入式编码器字典中,用于存储类SignalStruct
和ParamStruct
指定:
访问模式来指针
头文件来R_Pointer.h美元
选择配置参数>代码生成>自定义代码>额外的构建信息>源文件和替换rtwdemo_roll_Value.c
:
rtwdemo_roll_Pointer.c
对于指针访问,a得到
函数现在返回一个指针,该指针的值必须与*
之前使用。例如,HDG_Ref导入生成的代码如下所示:
if (*get_HDG_Mode()){/*输出原子子系统:'/HeadingMode' */ rtb_Sum1 = (*get_HDG_Ref() - *get_Psi()) * 0.015F * *get_TAS();/* output for子系统:' /HeadingMode' */} else {/* output for Atomic子系统:' / rollanglerereference ' */ if ((real32_T)fabs(tmp_1) >= 3.0F) {rtb_Sum1 = tmp_1;}
在Embedded Coder Dictionary中创建自己的存储类可以灵活地定制函数名和返回类型。您还可以使用存储类GetSet
透过得到
和集
功能。有关更多信息,请参见通过使用存储类GetSet的函数访问数据.