Main Content

coder.mapping.api.CodeMapping

用于 C 代码生成的模型数据和函数接口配置

自 R2020b 起

    说明

    代码映射对象和相关函数能够为 Simulink® 模型的数据配置 C 代码生成。对于模型数据元素,代码映射将数据元素与由存储类和存储类属性组成的配置相关联。通过为整个模型中的数据元素类别指定默认配置,减少为 C 代码生成而准备模型的工作量。通过单独配置数据元素来覆盖默认配置。对于较小的模型,您可以选择单独配置每个数据元素。

    创建对象

    当您从 Simulink 编辑器的 App 选项卡中选择一个代码生成 App 时,例如 Simulink CoderEmbedded Coder,如果代码映射尚不存在,该 App 会创建一个 coder.mapping.api.CodeMapping 对象。该 App 基于存储在模型活动配置集对象中的代码自定义设置来创建代码映射。配置集对象可以为数据和函数指定内存段。

    通过调用函数 coder.mapping.utils.create 以编程方式创建 coder.mapping.api.CodeMapping 对象。

    对象函数

    addSignalAdd block output signal to model code mappings
    coder.mapping.api.getGet code mappings for model
    coder.mapping.utils.createCreate code mappings object for configuring data and function interface for C and C++ code generation
    findGet model elements for the category of model code mappings
    getDataDefaultGet default storage class or storage class property setting for model data category
    getDataStoreGet code and calibration configuration from code mappings for local or shared local data store
    getInportGet code and calibration configuration from code mappings for root-level inport
    getModelParameterGet code and calibration configuration from code mappings for model parameters
    getOutportGet code and calibration configuration from code mappings for root-level outport
    getSignalGet code and calibration configuration from code mappings for block output signal
    getStateGet code and calibration configuration from code mappings for block state
    removeSignalRemove block output signal from model code mappings
    setDataDefaultSet default storage class and storage class property values for model data category
    setDataStoreConfigure local or shared local data store for code and calibration file (a2l) generation
    setInportConfigure root-level inports for code and calibration file (a2l) generation
    setModelParameterConfigure model parameter for code and calibration file (a2l) generation
    setOutportConfigure root-level outport for code and calibration file (a2l) generation
    setSignalConfigure block signal data for code and calibration file (a2l) generation
    setStateConfigure block states for code and calibration file (a2l) generation

    示例

    全部折叠

    使用编程接口创建和使用 Simulink 模型的代码映射对象。

    加载模型 NoCoderMapping

    simulinkModel = "NoCoderMapping";
    load_system(simulinkModel);

    使用 try-catch 代码块确定该模型是否存在代码映射对象。在 try 模块中,尝试使用函数 coder.mapping.api.get 检索现有对象。在 catch 代码块中,使用函数 coder.mapping.utils.create 创建一个新代码映射对象。将代码映射对象存储在变量 codeMapObj 中。

    添加打印消息以显示模型是否具有现有代码映射对象。

    try
      codeMapObj = coder.mapping.api.get(simulinkModel);
              fprintf("" + ...
                " ========================================================\n" + ...
                " The model already had code mappings.\n" + ...
                " ========================================================\n");
    catch
              fprintf("" + ...
                " ==========================================\n" + ...
                " The model does not have code mappings.\n" + ...
                " Creating new code mappings for the model.\n" + ...
                " ==========================================\n");
      codeMapObj = coder.mapping.utils.create(simulinkModel);
    end
     ==========================================
     The model does not have code mappings.
     Creating new code mappings for the model.
     ==========================================
    

    检索模型的输入端口 inport_1 的存储类。

    getInport(codeMapObj,"inport_1","StorageClass")
    ans = 
    'Auto'
    

    将输入端口 inport_1 的存储类设置为 ExportedGlobal

    setInport(codeMapObj,"inport_1",StorageClass="ExportedGlobal")

    使用同一个 try-catch 代码块查看函数 coder.mapping.api.get 现在如何能够检索模型的现有代码映射。

    try
      codeMapObj = coder.mapping.api.get(simulinkModel);
              fprintf("" + ...
                " ========================================================\n" + ...
                " The model already had code mappings.\n" + ...
                " ========================================================\n");
    catch
              fprintf("" + ...
                " ==========================================\n" + ...
                " The model does not have code mappings.\n" + ...
                " Creating new code mappings for the model.\n" + ...
                " ==========================================\n");
      codeMapObj = coder.mapping.utils.create(simulinkModel);
    end
     ========================================================
     The model already had code mappings.
     ========================================================
    

    检索模型的输入端口 inport_1 的存储类。请注意,这是您之前设置的存储类。

    getInport(codeMapObj,"inport_1","StorageClass")
    ans = 
    'ExportedGlobal'
    

    关闭模型而不保存它。

    close_system(simulinkModel,false)

    版本历史记录

    在 R2020b 中推出

    全部展开