主要内容

代码映射编辑器- C

将模型元素与代码定义关联起来

描述

代码映射编辑器是一个图形界面,您可以在其中配置数据元素和入口点函数在模型中,不包括引用模型,用于代码生成。模型引用层次结构中的每个模型都有自己的代码映射。将模型数据元素的每个类别与特定的存储类关联并且每一类型号的入口点功能都有特定的功能定制模板贯穿一个模型。然后,根据需要为特定的数据元素覆盖这些设置和功能

存储类定义外观和位置等属性,代码生成器在为相关数据生成代码时使用这些属性。函数定制模板定义了代码生成器如何为相关函数生成代码。如果将存储类或函数自定义模板设置为默认的,您可以为该数据或功能类别配置内存部分。

要为代码生成配置数据元素和函数,请使用代码映射编辑器显示的表:

  • 数据默认值

  • 功能默认值

  • 功能

  • 港口

  • 外港

  • 参数

  • 数据存储

  • 信号/州

当有可以为模型元素配置的附加代码映射属性时,您可以通过在活动表中选择一行并单击图标配置其他代码映射属性图标。

在为代码生成配置信号之前,请将信号添加到模型代码映射中。通过在出现在信号线上方或下方的省略号上暂停以打开操作栏,从代码映射中添加和删除信号。单击添加信号删除信号按钮。的代码映射编辑器中也可以使用这些按钮信号/州选项卡。

打开代码映射编辑器- C

做以下任何一件事:

  • 打开嵌入式编码器®应用程序。C代码选项卡上,选择代码接口>默认代码映射代码接口>单个元素代码映射

  • 打开嵌入式编码器应用程序。C代码选项卡,在Simulink的左下角万博1manbetx®编辑器窗口中,单击代码的映射选项卡。

  • 在Simulink Editor窗口的模型画布中,单击万博1manbetx右下角的透视图控件并选择代码.然后,单击代码的映射选项卡。

例子

为根导入和输出端口块配置代码生成

配置根目录的代码生成轮廓尺寸而且外港块贯穿模型。应用默认配置可以节省时间,特别是对于使用大量数据的大型模型。在应用默认映射之后,您可以调整各个数据元素的映射。

搭建样例环境
  1. 将外部代码文件复制到可写文件夹中。

    拷贝文件(fullfile (matlabroot,“工具箱”,“环球套票”、“rtwdemos”,“roll_input_data.c”));拷贝文件(fullfile (matlabroot,“工具箱”,“环球套票”、“rtwdemos”,“roll_input_data.h”));拷贝文件(fullfile (matlabroot,“工具箱”,“环球套票”、“rtwdemos”,“roll_heading_mode.c”));拷贝文件(fullfile (matlabroot,“工具箱”,“环球套票”、“rtwdemos”,“roll_heading_mode.h”));
  2. 开放模式rtwdemo_roll.在您复制外部代码文件的文件夹中保存模型的副本。

  3. 打开嵌入式编码器应用程序。

配置默认映射

将代码生成器配置为:

  • 使用头文件roll_input_data.h来声明表示模型导入块的变量。

  • 表示模型的变量外港块作为单独的全局变量。

  • 中定义输出变量roll_output_data.c并将它们申报在roll_output_data.h

  • 配置代码生成器为其在代码中生成的变量使用的名称轮廓尺寸块。

  1. C代码选项卡上,选择代码接口>默认代码映射

  2. 数据默认值选项卡,在导入和导出,选择的行港口.然后,将存储类设置为ImportFromFile

  3. 单击图标配置其他代码映射属性图标和设置头文件roll_input_data.h

  4. 为模型元素类别设置存储类外港ExportToFile

  5. 头文件roll_output_data.h而且定义文件roll_output_data.c

为默认配置配置单个导入
  1. 在代码映射编辑器中,单击港口选项卡。将每个导入的存储类设置为汽车,这意味着代码生成器可能为了优化目的而消除或更改相关代码的表示。如果不可能进行优化,代码生成器将为导入应用默认配置。

  2. 强制代码生成器对导入、存储类使用默认配置ImportFromFile使用外部头文件roll_input_data.h.按下Ctrl键并选择导入。对于所选的一个导入,将存储类设置为型号默认值:ImportFromFile.编辑器更新所选导入的存储类设置。

覆盖默认映射

覆盖输入变量的默认源位置HDG_Mode.该变量在外部文件中声明roll_heading_mode.h

  1. 在代码映射编辑器中,单击港口选项卡。

  2. 选择HDG_Mode行。

  3. 存储类ImportFromFile

  4. 单击图标配置其他代码映射属性图标和设置头文件roll_heading_mode.h

  5. 类的代码中生成变量名轮廓尺寸与外部文件中的变量名匹配的块roll_input_data.h而且roll_heading_mode.h.在港口选项卡,选择每个轮廓尺寸块,单击图标配置其他代码映射属性图标和设置标识符到块名。当存储类设置为非汽车的值时,必须为标识符存储类属性。

在代码生成和构建过程中包含外部源文件

包括外部源文件roll_input_data.c而且roll_heading_mode.c在代码生成和构建过程中。设置模型配置参数源文件roll_input_data.c roll_heading_mode.c

保存模型。

生成和验证代码

生成代码并验证为轮廓尺寸而且输出Blocks显示如您所料。

  • rtwdemo_roll.h包括这些与存储类相关的头文件:

    #include "roll_output_data.h" #include "roll_input_data.h"
  • roll_heading_mode.c包括roll_heading_mode.h并定义了变量HDG_Mode

    #include "roll_heading_mode.h" HDG_Mode;
  • roll_input_data.c中声明的变量roll_input_data.h

    #include "roll_input_data.h"real32_T HDG_Ref;real32_T Rate_FB;real32_Tφ;real32_T Psi;real32_T助教;real32_T Turn_Knob;
  • roll_output_data.c包括此导出数据定义:

    real32_T Ail_Cmd;
  • roll_output_data.h包括此导出数据声明:

    extn real32_T;

配置入口点函数的默认函数名

默认情况下,代码生成器使用标识符命名规则R N美元命名入口点函数。$ R根模型的名称。$ N是函数的名称,例如,初始化一步,终止.要将生成的代码与现有的外部代码集成,或者遵循命名标准或指导原则,您可以调整默认命名规则。这个例子展示了如何添加文本字符串myproj_作为前缀R美元.调整默认命名规则可以节省时间,特别是对于代码生成器生成唯一的多速率模型一步每个速率的函数。

搭建样例环境
  1. 开放模式rtwdemo_multirate_multitasking.将副本保存到可写文件夹。

  2. 打开嵌入式编码器应用程序C代码选项卡打开,其中包括代码映射编辑器。

定义函数命名规则

创建定义命名规则的函数定制模板myproj_ R N美元

  1. 打开嵌入式编码器字典。在C代码选项卡上,选择代码接口>嵌入式编码器词典

  2. 单击功能定制模板选项卡。

  3. 点击添加

  4. 的名字列的新表行,命名新模板myproj_FunctionTemplate

  5. 函数名列,输入命名规则myproj_ R N美元

  6. 关闭嵌入式编码器字典。

配置默认映射
  1. C代码选项卡上,选择代码接口>默认代码映射

  2. 单击功能默认值选项卡。

  3. 初始化和终止而且执行函数类别,更改默认的函数定制模板从默认的myproj_FunctionTemplate

  4. 保存模型。

生成和检查代码

生成代码并验证入口点函数名。

void myproj_rtwdemo_multirate_multitask_step0 (void) /*采样时间:[1.0s, 0.0s] */ {(rtM-> timing . rateinteractive . tid0_1)++;if ((rtM->Timing.RateInteraction. tid0_1) > 1) {rtM->Timing.RateInteraction. if ((rtM->Timing.RateInteraction. tid0_1)Tid0_1 = 0;} if (rtM->Timing.RateInteraction.)TID0_1 == 1) {rtDW。RateTransition = rtdww . ratetransition_buffer0;}而无。Out2 = 2.0 * rtDW。RateTransition + rtU.In1_1s;而无。Out1 = (3.0 * rtDW.)RateTransition + rtU.In1_1s) * 5.0 + rtY.Out2; } /* Model step function for TID1 */ void myproj_rtwdemo_multirate_multitasking_step1(void) /* Sample time: [2.0s, 0.0s] */ { rtDW.RateTransition_Buffer0 = rtDW.Integrator_DSTATE; rtDW.Integrator_DSTATE += 2.0 * rtU.In2_2s; } void myproj_rtwdemo_multirate_multitasking_initialize(void) { /* (no initialization code required) */ } void myproj_rtwdemo_multirate_multitasking_terminate(void) { /* (no terminate code required) */ }

定制单独的入口点功能

对于您的模型,您可以自定义大多数入口点函数的名称和执行函数的参数,例如步进函数和Simulink函数。万博1manbetx这个例子展示了如何为模型定制入口点函数rtwdemo_roll

搭建环境
  1. 将外部代码文件复制到可写文件夹中。

    拷贝文件(fullfile (matlabroot,“工具箱”,“环球套票”、“rtwdemos”,“roll_input_data.c”));拷贝文件(fullfile (matlabroot,“工具箱”,“环球套票”、“rtwdemos”,“roll_input_data.h”));拷贝文件(fullfile (matlabroot,“工具箱”,“环球套票”、“rtwdemos”,“roll_heading_mode.c”));拷贝文件(fullfile (matlabroot,“工具箱”,“环球套票”、“rtwdemos”,“roll_heading_mode.h”));
  2. 开放模式rtwdemo_roll.在您复制外部代码文件的文件夹中保存模型的副本。

  3. 打开嵌入式编码器应用程序。C代码选项卡打开,其中包括代码映射编辑器。

定制入口点功能
  1. C代码选项卡上,选择代码接口>单个元素代码映射

  2. 单击功能选项卡。

  3. 自定义步骤(执行)函数的名称。在函数名列,输入名称roll_run

  4. 的自定义参数一步函数。的配置对话框一步控件中的原型超链接来实现预览功能列。

  5. 选择为Step函数原型配置参数

  6. 若要打开显示参数的默认配置的表,请单击获取默认

  7. 自定义参数:

    • C返回参数下拉列表,选择Ail_Cmd

    • 对于每个端口,在C标识名称字段,删除arg_前缀的默认名称。

    • HDG_Mode导入,从C类型限定符下拉列表,选择指针.在C标识名称字段将名称更改为HDG_Mode_Ptr

  8. 点击应用并验证函数原型是否反映了更改。

  9. 通过单击验证更改验证

  10. 点击好吧

生成和验证代码
  1. 生成的代码。

  2. 验证生成的C文件中的更新rtwdemo_roll.c.要查找已更新的一步函数(roll_run),使用搜索字段。

  3. 选择一步函数验证其原型。

    real32_T roll_run(real32_T Phi, real32_T Psi, real32_T Rate_FB, real32_T TAS, boolean an_t AP_Eng, boolean an_t *HDG_Mode_Ptr, real32_T HDG_Ref, real32_T Turn_Knob)

相关的例子

参数

数据默认值

命名Simulink模型数据元素的类别。万博1manbetx您为类别设置的存储类在整个模型中应用于该类别中的元素。

模型元素类别 描述
港口 模型的根级输入端口,例如轮廓尺寸而且总线元件块。
外港 模型的根级输出端口,例如外港而且输出总线元件块。
信号、状态和内部数据 模型内部的数据元素,例如块输出信号、离散块状态、数据存储和过零信号。
共享本地数据存储 数据存储内存带有block参数的块跨模型实例共享集。这些数据存储只能在定义它们的模型中访问。数据存储值在模型的实例之间共享。
全局数据存储 由基本工作区中的信号对象或数据字典中定义的数据存储。应用程序中的多个模型可以使用这些数据存储。要在“代码映射”编辑器中查看和配置这些数据存储,请单击刷新链接到类别名称的右侧。单击此链接将更新模型图。
模型参数参数 您配置为模型参数的模型工作区中的参数。这些参数在模型块中公开,以使每个模型实例能够提供自己的值。要将参数指定为模型参数,请选择模型数据编辑器>参数>论点复选框。
模型参数 在模型中定义的参数,例如模型工作区中的参数。排除模型参数。
外部参数 在基本工作区或数据字典中定义为对象的参数。应用程序中的多个模型可以使用这些参数。要在“代码映射”编辑器中查看和配置这些参数,请单击刷新链接到类别名称的右侧。单击此链接将更新模型图。
常量

无法内联的固定值块输出和参数。由于下列原因之一,这些值被存储在变量中。

  • 该值是一个大于循环展开阈值的数组。

  • 代码中需要值地址。

代码映射编辑器为给定的类别提供有效的存储类选项。这些选项包括:

  • 未指定的存储类(默认的).代码生成器将数据元素类别的代码放在标准结构中,例如B_ExtY_ExtU_DW_,P_.看到生成代码中的数据结构

  • 相关的预定义存储类,例如ExportedGlobal

  • 可用包中的相关存储类,例如ImportFromFile

  • 在嵌入式编码器字典中定义的存储类。

代码生成器用来确定它为模型数据元素生成的代码的属性(如外观和位置)的定义(规范)。看到为控制生成代码中的数据表示选择存储类

功能默认值

命名一类Simulink模型函数。万博1manbetx您为某个类别设置的函数定制模板在整个模型中应用于该类别中的函数。

型号功能分类 描述
初始化和终止 用于初始化和终止的入口点函数
执行 用于启动执行和重置的入口点函数
共享效用 共享实用功能

代码生成器用来确定它为模型函数生成的代码的属性(如外观和位置)的定义(规范)。默认情况下,模板是不可用的。您可能需要在嵌入式编码器字典中定义函数自定义模板。

功能

标识入口点函数的类型。对于基于速率的模型,此属性提供的抽样速率一步功能。

代码生成器用来确定它为模型函数生成的代码的属性(如外观和位置)的定义(规范)。

命名为代码生成器给出的模型函数。

入口点函数原型的预览。要验证原型,请检查原型预览。要打开可以自定义原型的对话框,请单击预览超链接。有关更多信息,请参见配置功能默认配置

港口

标识根导入块或In总线元素块的元素(例如,InBus1.signal1)在模型中。如果元素解析为数据对象,则Code Mappings编辑器在源名称的右侧显示一个解析为信号对象的图标,并根据元素的存储类设置是否为解析配置汽车.如果存储类为汽车,数据元素假定数据对象指定的代码配置。控件中的显示文本存储类来自信号对象:后面是数据对象的存储类的名称。如果存储类不是汽车,数据元素采用您在Code Mappings编辑器中指定的配置。

代码生成器用于确定为根导入生成的代码的属性(如外观和位置)的定义。看到为控制生成代码中的数据表示选择存储类

在生成的代码中表示导入的变量的名称。

选择校准用于输入以启用校准。选择NoCalibration查询输入的值,并关闭校准功能。

为便于阅读,将ecu内部值转换为物理值的方法名称。

在校准工具中可选显示用于测量目的的导入名称,与Simulink模型中的导入名称不同。万博1manbetx

在校准工具中为测量指定的特殊显示格式。中指定的显示格式CompuMethod的输入。

外港

标识根级别外港类的一个元素输出总线元件块(例如,OutBus1.signal1)在模型中。如果元素解析为数据对象,则Code Mappings编辑器在源名称的右侧显示一个解析为信号对象的图标,并根据元素的存储类设置是否为解析配置汽车.如果存储类为汽车,数据元素假定数据对象指定的代码配置。控件中的显示文本存储类来自信号对象:后面是数据对象的存储类的名称。如果存储类不是汽车,数据元素采用您在Code Mappings编辑器中指定的配置。

代码生成器用于确定为根输出端口生成的代码的属性(例如外观和位置)的定义。看到为控制生成代码中的数据表示选择存储类

在生成的代码中表示输出端口的变量的名称。

选择校准为输出端口启用校准。选择NoCalibration查询输出端口的值,并关闭校准功能。

为便于阅读,将ecu内部值转换为物理值的方法名称。

在校准工具中可选显示用于测量目的的输出端口名称,与Simulink模型中的输出端口名称不同。万博1manbetx

在校准工具中为测量指定的特殊显示格式。中指定的显示格式CompuMethod出口的。

参数

标识模型中的参数。如果元素解析为数据对象,则Code Mappings编辑器在源名称的右侧显示一个解析为参数对象的图标,并根据元素的存储类设置是否为解析配置汽车.如果存储类为汽车,数据元素假定数据对象指定的代码配置。控件中的显示文本存储类从参数对象:后面是数据对象的存储类的名称。如果存储类不是汽车,数据元素采用您在代码映射中指定的配置。

表中列出了参数元素的类型。

参数元素类型 描述
模型参数参数 块参数在您配置为模型参数的模型工作区中。参数在模型块中公开,以使每个模型实例能够提供自己的值。要将参数指定为模型参数,请选择模型数据编辑器>参数>论点复选框。
模型参数 在模型中定义的参数,例如模型工作区中的参数。排除模型参数。
外部参数 参数定义为基本工作区或数据字典中的对象。应用程序中的多个模型可以使用这些参数。只有当模型使用这样的元素时,这个参数分组才会出现在编辑器中。要在“代码映射”编辑器中查看和配置这些参数,请单击刷新链接到类别名称的右侧。单击此链接将更新模型图。

定义,代码生成器使用该定义来确定它为参数生成的代码的属性,例如外观和位置。对于外部参数,单击刷新类名称右侧的链接,编译后的存储类(例如,为外部参数配置的存储类)将出现在存储类列。看到为控制生成代码中的数据表示选择存储类

在生成的代码中表示模型参数或模型参数参数的变量的名称。

选择校准为模型参数启用校准。选择NoCalibration查询模型参数值,并关闭校准功能。

为便于阅读,将ecu内部值转换为物理值的方法名称。

校准工具中用于测量目的的模型参数的可选显示名称,与Simulink模型中的输出端口名称不同。万博1manbetx

在校准工具中为测量指定的特殊显示格式。中指定的显示格式CompuMethod的模型参数。

数据存储

标识模型中的数据存储。如果元素解析为数据对象,则Code Mappings编辑器在源名称的右侧显示一个解析为信号对象的图标,并根据元素的存储类设置是否为解析配置汽车.如果存储类为汽车,数据元素假定数据对象指定的代码配置。控件中的显示文本存储类来自信号对象:后面是数据对象的存储类的名称。如果存储类不是汽车,数据元素采用您在代码映射中指定的配置。

表中列出了数据存储元素的类型。

数据存储元素的类型 描述
本地数据存储 可以从模型层次结构中处于或低于您定义数据存储的级别的任何位置访问的数据存储。可以在模型中图形化地定义本地数据存储数据存储内存块或通过在模型工作区中创建一个信号对象(合成数据存储)。
共享本地数据存储 数据存储内存具有Block参数的块跨模型实例共享集。这些数据存储只能在定义它们的模型中访问。数据存储值在模型的实例之间共享。只有当模型中存在这样的元素时,数据存储的分组才会出现在编辑器中。
全局数据存储 由基本工作区或数据字典中的信号对象定义的数据存储。应用程序中的多个模型可以使用这些数据存储。这些数据存储在代码映射中不可配置。单击刷新按钮后,它们将以只读状态出现在Code Mappings编辑器中,用于查看或计算。只有当模型使用这样的元素时,数据存储的分组才会出现在编辑器中。要在“代码映射”编辑器中查看和配置这些数据存储,请单击刷新链接到类别名称的右侧。单击此链接将更新模型图。

本地和共享本地数据存储的名称以如下格式显示block-namedata-store-name

根据数据存储元素在模型中的表示和配置方式,本地和共享本地数据存储可以解析为模型工作区、基于工作区或数据字典中的信号对象。全局数据存储解析为基本工作区或数据字典中的信号对象。

代码生成器用来确定它为数据存储区生成的代码的属性(例如外观和位置)的定义。对于全局数据存储,单击刷新类名称右侧的链接,编译后的存储类(例如,为全局数据存储配置的存储类)将出现在存储类列。看到为控制生成代码中的数据表示选择存储类

链接,您可以单击该链接以在模型图中突出显示数据存储。

在生成的代码中表示数据存储的变量的名称。

选择校准为数据存储启用校准。选择NoCalibration查询数据存储的值,并关闭校准功能。

为便于阅读,将ecu内部值转换为物理值的方法名称。

校准工具中用于测量目的的数据存储的可选显示名称,与Simulink模型中的输出端口名称不同。万博1manbetx

在校准工具中为测量指定的特殊显示格式。中指定的显示格式CompuMethod数据存储的。

信号/州

标识模型中的信号线或状态。如果元素解析为数据对象,则Code Mappings编辑器在源名称的右侧显示解析为信号对象的图标,并根据元素的存储类设置是否为解析配置汽车.如果存储类为汽车,数据元素假定数据对象指定的代码配置。控件中的显示文本存储类来自信号对象:后面是数据对象的存储类的名称。如果存储类不是汽车,数据元素采用您在Code Mappings编辑器中指定的配置。

代码映射编辑器列出:

  • 通过使用数据元素名称命名信号和状态

  • 使用未命名的信号格式源数据块端口号

  • 通过使用格式在多个块中使用的状态block-name州名

要在模型的Code Mappings编辑器中配置单个信号线,首先您必须将信号添加到映射中。看到为C代码生成配置信号数据

代码生成器用来确定它为信号线或状态生成的代码的属性(如外观和位置)的定义。看到为控制生成代码中的数据表示选择存储类

链接,您可以单击该链接来突出显示使用模型图中状态的信号线或块。

在生成的代码中表示信号或状态的变量的名称。

选择校准为信号或状态启用校准。选择NoCalibration查看信号或状态的值,并取消校准。

为便于阅读,将ecu内部值转换为物理值的方法名称。

校准工具中用于测量目的的信号或状态的可选显示名称,与Simulink模型中的输出端口名称不同。万博1manbetx

在校准工具中为测量指定的特殊显示格式。中指定的显示格式CompuMethod信号或状态的。

版本历史

在R2018a中介绍