在传统功能实现的查找表

这个例子说明了如何使用旧代码的工具集成实现N维表查询原有的C函数。

遗留代码工具允许您:

  • 提供传统的功能规格,

  • 生成被模拟期间用来调用遗留代码C-MEX S-功能,和

  • 编译并建立模拟生成的S-功能。

提供了旧版功能规格

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

FLT directLookupTableND(const FLT *tableND, const UINT32 nbDims, const UINT32 *tableDims, const UINT32 *tableIdx)

其中FLT是一个typedef浮动,和UINT32是一个typedef为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 ='单Y1 = DirectLookupTable3D(单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 u1[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',DEFS);
# # #开始编译sldemo_sfun_dlut3D墨西哥人(“我/ mathworks猛击/棒/ Bdoc20a /构建/ matlab工具箱/模型/ simdemos / simfeat万博1manbetxures / sldemo_lct_src’,‘我/ tmp / Bdoc20a_1326390_11156 / tpb4248eb5’,‘- c’,‘-outdir’,‘/ tmp / Bdoc20a_1326390_11156 / tpb346e8ec_0cf6_4058_a912_46657f64070d’,‘/ mathworks /猛击/棒/ Bdoc20a /构建/ matlab工具箱/模型/ simdemos / simfeatures / sldemo_lct_src directLookupTableND.c”)建设与gcc。墨西哥人成功完成。墨西哥人(“sldemo_sfun_dlut3D。-I/tmp/Bdoc20a_1326390_11156/tpb4248eb5', '/tmp/Bdoc20a_1万博1manbetx326390_11156/tpb346e8ec_0cf6_4058_a912_46657f64070d/directLookupTableND.o')与'gcc'构建。墨西哥人成功完成。# # #完成编译sldemo_sfun_dlut3D退出# # # # # #开始编译sldemo_sfun_dlut4D墨西哥人(“我/ mathworks猛击/棒/ Bdoc20a /构建/ matlab工具箱/模型/ simdemos / simfeatures / sldemo_万博1manbetxlct_src’,‘我/ tmp / Bdoc20a_1326390_11156 / tpb4248eb5’,‘- c’,‘-outdir’,‘/ tmp / Bdoc20a_1326390_11156 / tp1f379199_801b_445a_a49a_2450e9146abb’,‘/ mathworks /猛击/棒/ Bdoc20a /构建/ matlab工具箱/模型/ simdemos / simfeatures / sldemo_lct_src directLookupTableND.c”)建设与gcc。墨西哥人成功完成。墨西哥人(“sldemo_sfun_dlut4D。-I/tmp/Bdoc20a_1326390_11156/tpb4248eb5', '/tmp/Bdoc20a_1万博1manbetx326390_11156/tp1f379199_801b_445a_a49a_2450e9146abb/directLookupTableND.o')与'gcc'构建。墨西哥人成功完成。 ### Finish Compiling sldemo_sfun_dlut4D ### Exit

生成的代码生成的rtwmakecfg.m文件

在创建TLC块文件之后,功能legacy_code()可以再次与第一输入设置为“rtwmakecfg_generate”,以便产生通过编码器的Simulink一个rtwmakecfg.m文件来支持代码生成™调用。万博1manbetx万博1manbetx生成rtwmakecfg.m文件是否为S-功能所需的源文件和头文件不在同一目录中S-功能,并且要在代码生成过程中产生的Makefile中添加这些依赖关系。

注:完成只有当你要模拟加速模式模型这一步。

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查找块;万博1manbetx结果是相同的。

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