主要内容

遗留函数中的定点参数

这个例子向您展示了如何使用遗留代码工具来集成遗留C函数,这些函数使用定点数据类型的参数传递输入和输出。

遗留代码工具允许您:

  • 提供遗留功能规范;

  • 生成一个C-MEX函数,用于在模拟期间调用遗留代码

  • 编译并构建生成的s函数用于仿真。

提供遗留功能规范

遗留代码工具提供的函数采用特定的数据结构或结构数组作为参数。数据结构通过调用函数legacy_code()来初始化,使用'initialize'作为第一个输入。在初始化结构之后,您必须将其属性分配给与集成的遗留代码相对应的值。有关属性的详细帮助,请致电legacy_code(“帮助”)。在这个例子中被调用的遗留函数的原型是:

myFixpt timesS16(const myFixpt in1, const myFixpt in2, const uint8_T fracLength)

其中myFixpt逻辑上是一个定点数据类型,物理上是一个16位整数的类型定义:

myFixpt = 万博1manbetxSimulink.NumericType;myFixpt。DataTypeMode =“定点:二进位缩放”;myFixpt。Signed = true;myFixpt。WordLength = 16;myFixpt。分数长度= 10;myFixpt。IsAlias = true;myFixpt。HeaderFile =“timesFixpt.h”;

遗留源代码可以在文件中找到timesFixpt.h,timesS16.c

% sldemo_sfun_gain_fixptDef = legacy_code(“初始化”);def.SFunctionName =“sldemo_sfun_gain_fixpt”;def.OutputFcnSpec ='myFixpt y1 = timesS16(myFixpt u1, myFixpt p1, int8 p2)';def.HeaderFiles = {“timesFixpt.h”};def.SourceFiles = {“timesS16.c”};def.IncPaths = {“sldemo_lct_src”};def.SrcPaths = {“sldemo_lct_src”};

生成和编译用于仿真的s函数

函数legacy_code()在第一个输入设置为'generate_for_sim'时再次被调用,以便根据输入参数'def'提供的描述自动生成和编译C-MEX s函数。这个s函数用于在仿真中调用遗留函数。s函数的源代码可在该文件中找到sldemo_sfun_gain_fixpt.c

legacy_code (“generate_for_sim”def);
###开始编译sldemo_sfun_gain_fixpt mex('-I/mathworks/devel/bat/Bdoc20b/build/matlab/toolbox/simulink/simd万博1manbetxemos/simfeatures/sldemo_lct_src', '-I/tmp/Bdoc20b_1595526_151713/tpd36f2565', '-c', '-outdir', '/tmp/Bdoc20b_1595526_151713/tp813bf2c4_da84_4f18_a392_244f3e41b173', '/mathworks/devel/bat/Bdoc20b/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src/timesS16.c')构建'gcc'。MEX成功完成。mex('sldemo_sfun_gain_fixpt.c', '-I/mathworks/devel/bat/Bdoc20b/build/matlab/toolbox/万博1manbetxsimulink/simdemos/simfeatures/sldemo_lct_src', '-I/tmp/Bdoc20b_1595526_151713/tpd36f2565', '/tmp/Bdoc20b_1595526_151713/tp813bf2c4_da84_4f18_a392_244f3e41b173/timesS16.o')使用'gcc'构建。MEX成功完成。完成编译sldemo_sfun_gain_fixpt ###退出

生成一个rtwmakecfg。m代码生成文件

创建TLC块文件后,可以再次调用函数legacy_code(),第一个输入设置为'rtwmakecfg_generate',以生成rtwmakecfg。m文件,以支持通过S万博1manbetximulink®Coder™代码生成。万博1manbetx生成rtwmakecfg。如果s -函数所需的源文件和头文件与s -函数不在同一个目录中,并且您希望在代码生成过程中生成的makefile中添加这些依赖项,则可以使用m文件。

注意:只有当您要在加速模式下模拟模型时,才需要完成此步骤。

legacy_code (“rtwmakecfg_generate”def);

生成用于调用生成的s函数的掩码s函数块

在编译了C-MEX S-function源代码之后,可以再次调用函数legacy_code(),并将第一个输入设置为'slblock_generate',以便生成一个被屏蔽的S-function块,该块被配置为调用该S-function。块被放置在新模型中,并且可以复制到现有模型中。

% legacy_code('slblock_generate', def);

演示与遗留代码生成的集成

该模型sldemo_lct_fixpt_params显示与遗留代码的集成。子系统TestFixpt充当通过生成的s函数调用遗留C函数的工具。

open_system (“sldemo_lct_fixpt_params”) open_system (“sldemo_lct_fixpt_params / TestFixpt”) sim卡(“sldemo_lct_fixpt_params”
ans = 万博1manbetxSimulink。SimulationOutput: yout: [101x4 double] SimulationMetadata: [1x1 万博1manbetxSimulink。ErrorMessage: [0x0 char]