主要内容

替换并重命名数据类型以符合编码标准

默认情况下,生成的代码使用数据类型别名,例如real_t.INT32_T..该代码使用这些别名来定义全局和局部变量。如果您的编码标准要求您使用其他数据类型别名,包括现有代码定义的别名,则可以:

  • 为整个模型配置数据类型替换。

  • 配置单个数据项(例如信号、参数和状态)以使用特定的数据类型别名。

有关控制模型中数据类型的信息,请参见控制信号数据类型

检查外部C代码

将此C代码保存到名为my_types.h.在当前文件夹中。此文件表示现有代码中的头文件,该头文件通过使用类型定义声明。

#include  typedef double my_dblecrecision;typedef短my_int16;typedef bool my_bool;

探索示例模型和默认生成的代码

  1. 打开示例模型ex_数据类型_替换

    open_system(fullfile(docroot,'工具箱','ecoder',“例子”,......“ex_data_type_replacement”))

  2. 在这一点造型选项卡,单击模型数据编辑器

  3. 在模型数据编辑器中,检查信号标签。

  4. 设定改变视图下拉列表到代码.在数据表中,存储类列显示命名的信号线,例如临时使用存储类ExportedGlobal..使用此设置,信号线显示在生成的代码中作为单独的全局变量。

  5. 设定改变视图下拉列表到设计

  6. 更新方框图。

    金宝appSimulink为每个使用继承数据类型设置的信号分配一个特定的数据类型,例如继承:通过内部规则继承

  7. 在数据表中,展开数据类型专栏。该列显示模型中的信号混合使用数据类型int16,双倍的, 和布尔. 您还可以在模型中看到这些数据类型。

  8. 从模型生成代码。

  9. 在代码生成报告中,检查共享实用程序文件RTWTYPES.H..代码使用类型定义使用标准重命名原始C数据类型的语句金宝app®编码员™别名。例如,代码重命名原语类型双倍的通过使用别名real_t.

    typedef双重real_t;

  10. 检查文件ex_data_type_replacement.c.. 代码使用默认数据类型别名来声明和定义变量。例如,代码使用数据类型real_t.,int16_t., 和boolean_T定义全局变量的步骤flow,临时, 和intlk

    实际流入;/*'<根目录>/In3'*/int16\u T temp;/*'/Add2'*/boolean\u T intlk;/*'/Compare'*/

    该模型函数使用相同的数据类型别名定义局部变量。

    real_T rtb_Add;real_T rtb_FilterCoefficient;

重用外部数据类型定义

使用中定义的自定义数据类型配置生成的代码以定义变量my_types.h.而不是默认类型名。

  1. 在命令提示下,创建一个金宝appsimulink.aliaStype.对您的外部代码定义的每个数据类型别名的对象。

    金宝appsimulink.importexternalctypes(“我的类型。h”);

    在基础工作区中,金宝appSimulink.ImportTexternalTypes函数创建对象我的精确度,my_int16, 和我的兄弟

    对于每个对象,函数设置datascope.财产'进口'头饰财产“我的类型。h”. 使用这些设置,代码生成器不会创建类型定义语句,但生成的代码将重用来自的语句my_types.h.通过包括(#包括)档案。

  2. 在模型中,在“配置参数”对话框中代码生成>数据类型更换窗格,选择替换生成代码中的数据类型名称

  3. 的选项替换名按表列。

    金宝appSimulink名称 替换名
    双倍的 我的精确度
    int16 my_int16
    布尔 我的兄弟

  4. 从模型生成代码。

  5. 在“代码生成”报告中,检查该文件RTWTYPES.H..现在,代码使用#包括用于导入外部头文件内容的指令my_types.h.,其中包含自定义数据类型别名。

    #include“my_types.h”/ *用户定义替换数据类型for int16_t real_t boolean_t * /

  6. 检查文件ex_data_type_replacement.c.. 代码使用自定义数据类型别名我的精确度,my_int16, 和我的兄弟定义全局变量,如flow,临时, 和intlk

    我的\u dblPrecision流入;/*'<根目录>/In3'*/my\u int16 temp;/*'/Add2'*/my\u bool intlk;/*'/Compare'*/

    该模型函数通过使用自定义数据类型别名定义本地变量。

    my_dblPrecision rtb_Add;我的DBL精度rtb过滤器效率;

为各个数据项创建有意义的数据类型别名

假设您的编码标准要求重要数据项使用一种数据类型,其名称表示实际意义。你可以创造更多金宝appsimulink.aliaStype.对象来表示这些自定义数据类型别名。使用对象设置模型中数据项的数据类型。

  1. 在模型数据编辑器中数据类型列,使用金宝appsimulink.aliaStype.对象设置这些块输出的数据类型。您可以在模型中选择一个信号线,该信号线在模型数据编辑器中突出显示相应的行,或者通过使用通过使用模型数据编辑器中的信号过滤器件盒子。

    输出数据类型
    流量设定点 flow_t.
    Add2(这给了相比块) difftemp_t.

  2. 使用模型数据编辑器Inports / Outports.标签设置第三个数据类型inport.块到flow_t.

  3. 在这一点造型选项卡,在下面设计,点击属性查看器

  4. 选择标有“流量控制器”的块。在属性检查器中,单击打开打开区块对话框。

  5. 在这一点数据类型选项卡,设置总和输出控制. 点击好的

    通过这些数据类型设置,一些命名信号,例如临时flow,使用唤起现实世界数量的数据类型,例如液体流速和温度。

  6. 在命令提示下,创建金宝appsimulink.aliaStype.对象表示这些新的自定义数据类型别名。

    flow\u T=金宝appSimulink.AliasType(“双人”);difftemp_t = 金宝appsimulink.aliaStype(“int16”);ctrl_T =仿金宝app真软件。AliasType (“双人”);

    在模型中,信号flow流量设定使用基本数据类型双倍的,所以数据类型别名flow_t.映射到双倍的

  7. 更新方框图。

    由于数据类型继承,其他信号也使用自定义数据类型别名。例如,的输出数据类型添加由第三次喂食inport.块设置为继承:通过内部规则继承. 内部规则选择块输入使用的相同数据类型,flow_t.

  8. 从模型生成代码。

  9. 文件ex_data_type_replacement_types.h定义新的数据类型flow_t.,difftemp_t., 和控制作为的别名我的精确度my_int16

    typedef my_dblrecision flow_t;typedef my_int16 difftemp_t;typedef my_dblrecision ctrl_t;

  10. 在文件中ex_data_type_replacement.c.,代码使用新的类型名称定义全局变量。

    流量\u T流量;/*'<根>/In3'*/flow\u T flowsett;/*'<根>/Flow Setpoint'*/ctrl\u T flowCtrl;/*'<根>/Interlock'*/diffTemp\u T temp;/*'/Add2'*/

  11. 对于不使用新数据类型的块,相应的生成代码继续使用前面指定的替换类型。例如,在文件中ex_data_type_replacement.h.,块的输出三机一体In2显示为使用替换类型的结构字段my_int16

    /*外部输入(带自动存储的根输入端口信号)*/typedef struct{my_int16 In1;/*'<根>/In1'*/my\u int16 In2;/*'/In2'*/}ExtU\u ex\u data\u type\u replacement;

为基元类型创建单点定义

自定义数据类型别名flow_t.控制映射到原始数据类型双倍的.如果要从中更改此基础数据类型双倍的单身的(浮动),你必须记得修改基型两者的属性金宝appsimulink.aliaStype.物体。

为了更容易地进行此更改,您可以创建金宝appsimulink.numerictype.对象并配置两者金宝appsimulink.aliaStype.对象引用它。然后,您需要仅修改金宝appsimulink.numerictype.目的。一种金宝appsimulink.numerictype.对象使您可以在不创建数据类型别名的情况下共享数据类型。

  1. 在命令提示下,创建一个金宝appsimulink.numerictype.对象表示原始数据类型单身的

    sharedType=Si金宝appmulink.NumericType;sharedType.DataTypeMode='单身的';

  2. 配置金宝appsimulink.aliaStype.物体flow_t.控制从这个新对象获取基础数据类型。

    flow_T。基类型=“sharedType”;ctrl_t.baseType =.“sharedType”;

  3. 在这一点调试选项卡,选择信息覆盖>基本数据类型信息覆盖>别名数据类型及(见端口数据类型).更新方框图。

    模型中的数据类型指示符显示别名flow_t.控制映射到原始类型单身的.要更改此基础基元类型,可以修改数据类型模式财产的金宝appsimulink.numerictype.目的,共享类型

默认情况下,金宝appsimulink.numerictype.对象不会引起另一个对象类型定义语句以显示在生成的代码中。

如果从模型生成代码,而金宝appsimulink.numerictype.对象表示数据类型单身的,生成的代码映射flow_t.控制默认金宝appSimulink编码器数据类型别名real32_t.,它映射到C数据类型浮动.你可以换real32_t.以与您更换的方式相同real_t.,int16_t., 和boolean_T(配置参数>代码生成>数据类型更换).

永久存储数据类型对象

这个金宝appsimulink.numerictype.金宝appsimulink.aliaStype.如果结束当前工作空间,则基本工作空间中的对象不会持久存在®会议。要永久存储这些对象,请考虑将模型迁移到数据字典中。看迁移模型以使用Simulink数据字典金宝app

创建和维护与多个C语言对应的对象类型定义声明

创建金宝appsimulink.aliaStype.对象,用于大量类型定义外部C代码中的陈述,考虑使用金宝appSimulink.ImportTexternalTypes功能。

相关话题