代码映射编辑器 - C
将模型元素与代码接口定义关联起来
说明
代码映射编辑器是一个图形界面,您可以在模型中配置数据元素和入口函数以进行代码生成。模型参考层次结构中的每个模型都有自己的代码映射。在整个模型中,将每个类别的模型数据元素与特定的存储类关联起来,并将每个类别的模型入口函数与特定的函数自定义模板关联起来。然后,根据需要针对特定数据元素和函数覆盖这些设置。对于附加了定义服务接口配置的 Embedded Coder® 字典的模型,您可以将模型的元素映射到附加到该模型的共享字典中定义的服务接口。
存储类定义外观和位置等属性,代码生成器在为相关数据生成代码时使用这些属性。 函数自定义模板定义代码生成器如何为相关函数生成代码。如果将存储类或函数自定义模板设置为默认,则可以为该数据或函数类别配置内存部分。
要配置代码生成的数据元素和函数,请使用代码映射编辑器显示中的选项卡:
数据默认值 (仅数据接口)
函数默认值(仅数据接口)
函数
输入端口
输出端口
数据传输(仅服务接口)
参数
数据存储
信号/状态
当可以为模型元素配置额外的代码映射属性时,您可以通过选择活动表中的一行并点击
图标来配置这些属性。例如,此屏幕截图显示了点击根级输入端口的附加属性按钮时打开的对话框。

在配置用于代码生成的信号之前,请先将该信号添加到模型代码映射中。通过暂停信号线上方或下方出现的省略号来打开操作栏,从代码映射中添加和删除信号。点击添加信号或删除信号按钮。这些按钮也可在信号/状态选项卡上的代码映射编辑器中使用。
打开 代码映射编辑器 - C
执行以下操作之一:
打开 Embedded Coder。对于数据接口配置,在 C 代码选项卡上,选择代码接口 > 默认代码映射或代码接口 > 个体元素代码映射。对于服务接口配置,C 代码选项卡,选择代码接口 > 组件接口或代码接口 > 子组件接口.
打开 Embedded Coder。在 C 代码选项卡上,在 Simulink® 编辑器窗口的左下角,点击代码映射选项卡。
在 Simulink 编辑器窗口的模型画布中,点击右下角的透视控件并选择代码。然后,点击代码映射选项卡。
示例
为根级 Inport 和 Outport 模块配置代码生成
在整个模型中为根 Inport 和 Outport 模块配置代码生成。应用默认配置可以节省时间,特别是对于使用大量数据的大型模型。应用默认映射后,您可以调整单个数据元素的映射。
通过在 MATLAB® 命令行窗口中输入以下命令来打开模型
RollAxisAutopilot:当前工作目录包含这些外部代码文件。openExample("RollAxisAutopilot")roll_input_data.croll_input_data.hroll_heading_mode.croll_heading_mode.h
打开 Embedded Coder。
配置代码生成器以:
使用头文件
roll_input_data.h来声明代表模型 Inport 模块的变量。将模型 Outport 模块的变量表示为单独的全局变量。
在
roll_output_data.c中定义输出变量,并在roll_output_data.h中声明它们。配置代码生成器在 Inport 模块的代码中生成的变量所使用的名称。
在 C 代码选项卡中,选择 代码接口 > 默认代码映射。
在数据默认值选项卡中的输入端口和输出端口下,选择输入端口的行。然后,将存储类设置为 ImportFromFile。
点击
图标并将头文件设置为 roll_input_data.h。将模型元素类别输出端口的存储类设置为 ExportToFile。
将头文件设置为
roll_output_data.h,将定义文件设置为roll_output_data.c。
在代码映射编辑器中,点击输入端口选项卡。每个输入端口的存储类设置为
Auto,这意味着代码生成器可能会为了优化目的消除或更改相关代码的表示。如果无法进行优化,代码生成器将应用输入端口的默认配置。强制代码生成器使用输入端口的默认配置,存储类
ImportFromFile和外部头文件roll_input_data.h。按下 Ctrl 键并选择输入端口。对于选定的输入端口之一,将存储类设置为 Model 默认值:从文件导入 。编辑器更新所选输入端口的存储类设置。
覆盖输入端口变量 HDG_Mode 的默认源位置。该变量在外部文件 roll_heading_mode.h 中声明。
在代码映射编辑器中,点击输入端口选项卡。
选择
HDG_Mode行。将存储类设置为
ImportFromFile。点击
图标并将头文件设置为 roll_heading_mode.h。配置代码生成器,为 Inport 模块的代码生成与外部文件
roll_input_data.h和roll_heading_mode.h中的变量名匹配的变量名。在输入端口选项卡上,选择每个 Inport 模块,点击
图标并将标识符设置为模块名称。当存储类设置为除自动以外的值时,您可以为标识符存储类属性指定一个值。如果将标识符属性留空,代码生成器将使用与建模元素关联的模块或信号的名称。
在代码生成和构建过程中包含外部源文件 roll_input_data.c 和 roll_heading_mode.c。将模型配置参数源文件设置为 roll_input_data.c roll_heading_mode.c。
保存模型。
生成代码并验证 Inport 和 Outport 模块生成的代码是否如您所期望的那样出现。
RollAxisAutopilot.h包含与存储类相关的这些头文件:#include "roll_output_data.h" #include "roll_input_data.h" #include "roll_heading_mode.h"
roll_heading_mode.c包含roll_heading_mode.h并定义变量HDG_Mode。#include "roll_heading_mode.h" boolean_T HDG_Mode;
roll_input_data.c定义在roll_input_data.h中声明的变量。#include "roll_input_data.h" boolean_T AP_Eng; real32_T HDG_Ref; real32_T Rate_FB; real32_T Phi; real32_T Psi; real32_T TAS; real32_T Turn_Knob;
roll_output_data.c包含此导出的数据定义:real32_T Ail_Cmd;
roll_output_data.h包含以下导出数据声明:extern real32_T Ail_Cmd;
为入口函数配置默认函数名称
代码生成器默认使用标识符命名规则 $R$N 来命名入口函数。$R 是根模型的名称。$N 是函数的名称,例如 initialize、step 和 terminate。为了将生成的代码与现有的外部代码集成或遵守命名标准或规范,您可以调整默认命名规则。此示例显示如何将文本字符串 myproj_ 添加为 $R$ 的前缀。调整默认命名规则可以节省时间,特别是对于代码生成器为每个速率生成唯一的 step 函数的多速率模型。
通过在 MATLAB 命令行窗口中输入以下命令来打开模型
MultirateMultitasking:openExample("MultirateMultitasking")打开 Embedded Coder。C 代码选项卡在 Simulink 工具条上打开。您可以通过选择状态栏附近的代码映射 - 组件接口来打开代码映射编辑器窗格。
创建定义命名规则 myproj_$R$N 的函数自定义模板。
打开 Embedded Coder 字典。在 C 代码选项卡中,选择 代码接口 > Embedded Coder 字典 (模型)。
在数据接口窗格中,选择函数自定义模板。
在中心窗格中,点击创建。
在右侧窗格中,将名称指定为
myproj_FunctionTemplate。将函数命名规则指定为
myproj_$R$N。关闭 Embedded Coder 字典。
在 C 代码选项卡中,选择 代码接口 > 默认代码映射。
点击函数默认值选项卡。
对于初始化/终止和执行函数类别,将默认函数自定义模板从
Default更改为myproj_FunctionTemplate。
保存模型。
生成代码并验证入口函数名称。
void myproj_MultirateMultitasking_step0(void) /* Sample time: [1.0s, 0.0s] */
{
(rtM->Timing.RateInteraction.TID0_1)++;
if ((rtM->Timing.RateInteraction.TID0_1) > 1) {
rtM->Timing.RateInteraction.TID0_1 = 0;
}
if (rtM->Timing.RateInteraction.TID0_1 == 1) {
rtDW.RateTransition = rtDW.RateTransition_Buffer0;
}
rtY.Out2 = 2.0 * rtDW.RateTransition + rtU.In1_1s;
rtY.Out1 = (3.0 * rtDW.RateTransition + rtU.In1_1s) * 5.0 + rtY.Out2;
}
/* Model step function for TID1 */
void myproj_MultirateMultitasking_step1(void) /* Sample time: [2.0s, 0.0s] */
{
rtDW.RateTransition_Buffer0 = rtDW.Integrator_DSTATE;
rtDW.Integrator_DSTATE += 2.0 * rtU.In2_2s;
}
void myproj_MultirateMultitasking_initialize(void)
{
/* (no initialization code required) */
}
void myproj_MultirateMultitasking_terminate(void)
{
/* (no terminate code required) */
}自定义单个入口函数
对于您的模型,您可以自定义大多数入口函数的名称以及执行函数的参量,例如步骤函数和 Simulink 函数。此示例显示如何自定义模型 RollAxisAutopilot 的入口函数。
通过在 MATLAB 命令行窗口中输入以下命令来打开模型
RollAxisAutopilot:当前工作目录包含这些外部代码文件。openExample("RollAxisAutopilot")roll_input_data.croll_input_data.hroll_heading_mode.croll_heading_mode.h
打开 Embedded Coder。C 代码选项卡在 Simulink 工具条上打开。您可以通过选择状态栏附近的代码映射 - 组件接口来打开代码映射编辑器窗格。
在 C 代码选项卡中,选择 代码接口 > 个体元素代码映射。代码映射编辑器打开,并选择函数选项选项卡。
自定义步骤(执行)函数的名称,使用源
Periodic:D1。在函数名称列中,输入名称roll_run。自定义
step函数的参量。点击函数预览列中的原型超链接,打开step函数的配置对话框。选择为单步函数原型配置参量。
要打开显示参量默认配置的表,点击获取默认值。
自定义参量:
从 C 返回参量下拉列表中,选择
Ail_Cmd。对于每个端口,在 C 标识符名称字段中,从其默认名称中删除
arg_前缀。对于
HDG_ModeInport,从 C 类型限定符下拉列表中选择指针。在 C 标识符名称字段中将名称更改为HDG_Mode_Ptr
点击应用并验证函数原型是否反映了更改。

点击验证验证更改。
点击确定。
生成代码。
验证生成的 C 文件
RollAxisAutopilot.c中的更新。要查找更新的step函数 (roll_run),请使用搜索字段。选择
step函数来验证其原型。real32_T roll_run(real32_T Phi, real32_T Psi, real32_T Rate_FB, real32_T TAS, boolean_T AP_Eng, boolean_T *HDG_Mode_Ptr, real32_T HDG_Ref, real32_T Turn_Knob)
相关示例
- 模型接口元素的 C 数据代码接口配置
- Choose Data Configuration Approach
- Choose Storage Class for Controlling Data Representation in Generated Code
- Configure Default C Code Generation for Categories of Data Elements and Functions
- 为模型入口函数配置生成的 C 函数接口
参数
版本历史记录
在 R2018a 中推出
