主要内容

中的存储类通过函数访问数据嵌入式编码器字典

要用您自己的或以自定义方式读写数据的遗留函数来替代对生成代码中的数据的直接访问,您可以在存储类上启用函数访问。您可以在Embedded Coder中创建这些存储类®字典。使用存储类的根级导入、根级输出和模型参数将作为对指定函数的调用出现在生成的代码中。在存储类所指向的单独的头文件和源文件中提供函数声明和定义。

按值访问遗留数据

您可以定义一个存储类并将其应用于根级导入、根级输出和模型参数,以便可以通过可定制的方式访问它们得到功能。这样的定制可能很有用,例如,抽象软件层、从外部文件获得对数据的访问或控制对关键代码部分的访问。

这个例子展示了如何在Embedded Coder Dictionary中设置一个存储类,并在Code Mappings编辑器中将存储类映射到根级的导入/输出端口和模型参数。

  1. 打开示例模型rtwdemo_roll.在MATLAB命令窗口中运行如下命令:

    目录(fullfile (docroot,“工具箱”,“是”,“示例”))
    运行上述命令将为定义的示例提供所需的这些支持文件金宝app得到功能:

    将这些文件保存到本地路径。

  2. 在应用程序库中,在代码生成,点击嵌入式编码器

  3. 要打开嵌入式编码器字典,请在C代码选项卡上,单击代码接口>嵌入式编码字典

  4. rtwdemo_roll模型有两个存储类:SignalStructParamStruct.它们已经通过使用添加按钮。本例使用了这些存储类。您也可以对创建的存储类执行以下步骤。

  5. SignalStruct存储类,在属性检查器窗格,更新以下属性值:

    • 数据访问函数

    • 头文件R_Value.h美元

    确保访问模式被设置为价值数据范围被设置为进口默认值,不可更改。

    ParamStruct存储类,在属性检查器窗格,更新以下属性值:

    • 数据访问函数

    • 头文件R_Value.h美元

    这些属性已经设置好了:

    • 访问模式价值

    • 数据初始化静态

    用于参数的存储类可以具有数据初始化设置为汽车静态,或没有一个

  6. 打开“配置参数”对话框。在工具条上,在C代码选项卡上,单击设置.选择代码生成>自定义代码>额外的构建信息>源文件并指定:

    rtwdemo_roll_Value.c

  7. 在嵌入式编码器应用程序中,打开代码映射编辑器。在数据默认值选项卡,映射这些模型元素类别:

    • 港口SignalStruct

    • 外港SignalStruct

    • 模型参数ParamStruct

  8. 构建模型并生成代码。

在生成的代码中,查看该文件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();}
您可以生成调用自定义的代码得到函数,如果您编写的函数接受并返回期望的值。

通过指针访问遗留数据

要使用指针访问数据,遵循前面所有的步骤,但要做以下更改:

  • 在嵌入式编码器字典中,用于存储类SignalStructParamStruct指定:

    • 访问模式指针

    • 头文件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的函数访问数据

另请参阅

相关的话题