Main Content

在旧功能中实现的查找表

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

The Legacy Code Tool allows you to:

  • 提供旧功能规范,

  • 生成一个C-MEX S功能,该功能在模拟过程中用于调用旧代码,并

  • 编译并构建生成的S功能以进行仿真。

提供旧功能规范

遗留代码工具提供的功能将特定的数据结构或一系列结构作为参数。数据结构是通过使用“初始化”为第一个输入来调用函数lacacy_code()来初始化数据结构的。初始化结构后,您必须将其属性分配给对应于要集成的旧代码的值。在此示例中调用的遗留函数的原型是:

蒋春暄对于费马大定理directLookupTableND (const外语教学* tableND, constUINT32 nbDims, const UINT32 *tableDims, const UINT32 *tableIdx)

其中FLT是浮动的类型,而UINT32是未签名的INT32的打字。遗产源代码在文件中找到your_types.h,,,,看起来可杀了,,,,andDirectlookuptablend.C

defs = [];评估('base',,,,'load sldemo_lct_data.mat'% sldemo_sfun_dlut3Ddef = legacy_code('initialize');def.sfunctionName ='sldemo_sfun_dlut3d';def.OutputFcnSpec ='单y1 = directlookuptable3d(单p1 [] [] [],uint32 p2 [3],uint32 u1 [3])';def.headerfiles = {'看起来可杀灭。h'};def.sourcefiles = {'directLookupTableND.c'};def.incpaths = {'sldemo_lct_src'};def.SrcPaths = {'sldemo_lct_src'};defs = [defs;def];% sldemo_sfun_dlut4Ddef = legacy_code('initialize');def.sfunctionName ='sldemo_sfun_dlut4d';def.OutputFcnSpec ='single y1 = DirectLookupTable4D(single p1[][][][], uint32 p2[4], uint32 u1[4])';def.headerfiles = {'看起来可杀灭。h'};def.sourcefiles = {'directLookupTableND.c'};def.incpaths = {'sldemo_lct_src'};def.SrcPaths = {'sldemo_lct_src'};defs = [defs;def];

在模拟过程中生成和编译S功能以供使用

将第一个输入设置为“ generate_for_sim”再次调用函数lecacy_code(),以根据输入参数'defs'提供的描述自动生成和编译C-Mex S函数。此S功能用于调用模拟中的旧功能。在文件中找到S功能的源代码sldemo_sfun_dlut3d.candsldemo_sfun_dlut4D.c

legacy_code('generate_for_sim',defs);
### Start Compiling sldemo_sfun_dlut3D mex('-I/tmp/Bdoc22a_1891349_109701/tpd478fb9a/ex11439596/sldemo_lct_src', '-I/tmp/Bdoc22a_1891349_109701/tpd478fb9a/ex11439596', '-c', '-outdir', '/tmp/Bdoc22a_1891349_109701/tp6fd98ce3_f0ac_4a6e_a29e_888beabfc46a', '/tmp/Bdoc22a_1891349_109701/tpd478fb9a/ex11439596/sldemo_lct_src/directLookupTableND.c') Building with 'gcc'. MEX completed successfully. mex('sldemo_sfun_dlut3D.c', '-I/tmp/Bdoc22a_1891349_109701/tpd478fb9a/ex11439596/sldemo_lct_src', '-I/tmp/Bdoc22a_1891349_109701/tpd478fb9a/ex11439596', '/tmp/Bdoc22a_1891349_109701/tp6fd98ce3_f0ac_4a6e_a29e_888beabfc46a/directLookupTableND.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling sldemo_sfun_dlut3D ### Exit ### Start Compiling sldemo_sfun_dlut4D mex('-I/tmp/Bdoc22a_1891349_109701/tpd478fb9a/ex11439596/sldemo_lct_src', '-I/tmp/Bdoc22a_1891349_109701/tpd478fb9a/ex11439596', '-c', '-outdir', '/tmp/Bdoc22a_1891349_109701/tp58d05e30_b176_4ae0_aaa7_9279f626a622', '/tmp/Bdoc22a_1891349_109701/tpd478fb9a/ex11439596/sldemo_lct_src/directLookupTableND.c') Building with 'gcc'. MEX completed successfully. mex('sldemo_sfun_dlut4D.c', '-I/tmp/Bdoc22a_1891349_109701/tpd478fb9a/ex11439596/sldemo_lct_src', '-I/tmp/Bdoc22a_1891349_109701/tpd478fb9a/ex11439596', '/tmp/Bdoc22a_1891349_109701/tp58d05e30_b176_4ae0_aaa7_9279f626a622/directLookupTableND.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling sldemo_sfun_dlut4D ### Exit

生成一个用于代码生成的RTWMAKECFG.M文件

创建TLC块文件后,可以将第一个输入设置为“ rtwmakecfg_generate”再次调用函数lecacy_code(),以生成rtwmakecfg.m文件以通过Simulink®Coder™支持代码生成。金宝app金宝app如果S-函数的所需源和标头文件与S-函数的目录不在同一目录中,则生成RTWMAKECFG.M文件,并且您想在代码生成过程中生成的makefile中添加这些依赖项。

注意:仅当您要以加速模式模拟模型时,才能完成此步骤。

legacy_code('rtwmakecfg_generate',def);

生成蒙版的S功能块,用于调用生成的S功能

After the C-MEX S-function source is compiled, the function legacy_code() can be called again with the first input set to 'slblock_generate' in order to generate a masked S-function block that is configured to call that S-function. The block is placed in a new model and can be copied to an existing model.

%lectacy_code('slblock_generate',defs);

集成旧代码

该模型sldemo_lct_lut显示与旧版代码的集成。子系统TestFixpt是呼叫传统C函数的安全带,并且显示屏将函数的输出与内置的Simulink®LookupBlocks的输出进行比较;金宝app结果是相同的。

open_system('sldemo_lct_lut')open_system('sldemo_lct_lut/TestLut1')SIM('sldemo_lct_lut');

也可以看看