主要内容

在遗留函数中实现的查找表

这个示例向您展示了如何使用遗留代码工具来集成实现n维表查找的遗留C函数。

遗留代码工具允许您:

  • 提供遗留功能规范;

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

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

提供遗留功能规范

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

FLT directLookupTableND(const FLT *tableND, const UINT32 nbdim, const UINT32 * tabledim, const UINT32 *tableIdx)

其中FLT是float类型的定义,而UINT32是unsigned int32类型的定义。遗留源代码可以在文件中找到your_types.hlookupTable.h,directLookupTableND.c

Defs = [];evalin (“基地”“负载sldemo_lct_data.mat”% sldemo_sfun_dlut3DDef = legacy_code(“初始化”);def.SFunctionName =“sldemo_sfun_dlut3D”;def.OutputFcnSpec ='single y1 = DirectLookupTable3D(single p1[][][], uint32 p2[3], uint32 u1[3])';def.HeaderFiles = {“lookupTable.h”};def.SourceFiles = {“directLookupTableND.c”};def.IncPaths = {“sldemo_lct_src”};def.SrcPaths = {“sldemo_lct_src”};Defs = [Defs;def);% sldemo_sfun_dlut4DDef = legacy_code(“初始化”);def.SFunctionName =“sldemo_sfun_dlut4D”;def.OutputFcnSpec ='single y1 = DirectLookupTable4D(single p1[][][]], uint32 p2[4], uint32 [4])';def.HeaderFiles = {“lookupTable.h”};def.SourceFiles = {“directLookupTableND.c”};def.IncPaths = {“sldemo_lct_src”};def.SrcPaths = {“sldemo_lct_src”};Defs = [Defs;def);

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

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

legacy_code (“generate_for_sim”def);
###开始编译sldemo_sfun_dlut3D mex('-I/tmp/Bdoc23a_2213998_2725040/tp24f9799f/simulink_feat金宝appures-ex11439596/sldemo_lct_src', '-I/tmp/Bdoc23a_2213998_2725040/tp24f9799f/simulink_features-ex11439596/ sl24f9799f /simulink_features-ex11439596/ sl24f9799f -outdir', '/tmp/Bdoc23a_2213998_2725040/tp0f898261_9752_4b19_af97_38e09f787a16', '/tmp/Bdoc23a_2213998_2725040/tp24f9799f/simulink_features-ex11439596/sldemo_lct_src/ directlookuptablende .c')使用'gcc'构建。MEX成功完成。. mex(' sldemo_sfun_dlut3dc ', '-I/tmp/Bdoc23a_2213998_2725040/tp24f979金宝app9f/simulink_features-ex11439596/sldemo_lct_src', '-I/tmp/Bdoc23a_2213998_2725040/tp24f9799f/simulink_features-ex11439596', '/tmp/Bdoc23a_2213998_2725040/tp0f898261_9752_4b19_af97_38e09f787a16/directLookupTableND.o')使用'gcc'构建。MEX成功完成。###完成编译sldemo_sfun_dlut3D ### Exit ###开始编译sldemo_sfun_dlut4D mex('-I/tmp/Bdoc23a_2213998_2725040/tp24f9799f/simulink_features-ex1143959金宝app6/sldemo_lct_src', '-I/tmp/Bdoc23a_2213998_2725040/tp24f9799f/simulink_features- 2711439596 / simulink_lct_src ', '-c', '-outdir', '/tmp/Bdoc23a_2213998_2725040/tpb0873123_aff2_4bfe_9157_71119fb26436', '/tmp/Bdoc23a_2213998_2725040/tp24f9799f/simulink_features-ex11439596/sldemo_lct_src/ directlookuptablende .c')使用'gcc'构建。MEX成功完成。. mex(' sldemo_sfun_dlut4dc ', '-I/tmp/Bdoc23a_2213998_2725040/tp24f979金宝app9f/simulink_features-ex11439596/sldemo_lct_src', '-I/tmp/Bdoc23a_2213998_2725040/tp24f9799f/simulink_features-ex11439596', '/tmp/Bdoc23a_2213998_2725040/tpb0873123_aff2_4bfe_9157_71119fb26436/directLookupTableND.o')使用'gcc'构建。MEX成功完成。完成编译sldemo_sfun_dlut4D ###退出

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

创建TLC块文件后,可以再次调用函数legacy_code(),第一个输入设置为'rtwmakecfg_generate',以生成rtwmakecfg。m文件,以支持通过S金宝appimulink®Coder™代码生成。金宝app生成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', defs);

集成遗留代码

该模型sldemo_lct_lut显示与遗留代码的集成。子系统TestFixpt用作对遗留C函数调用的控制,并且显示块将函数的输出与内置的Simulink®查找块的输出进行比较;金宝app结果是相同的。

open_system (“sldemo_lct_lut”) open_system (“sldemo_lct_lut / TestLut1”) sim卡(“sldemo_lct_lut”);

另请参阅