这个例子说明了如何使用旧代码的工具集成实现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.h,lookupTable.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];
函数legacy_code()再次被调用,第一个输入设置为'generate_for_sim',以便根据输入参数'defs'提供的描述自动生成和编译C-MEX s函数。这个s函数用于在模拟中调用遗留函数。在该文件中可以找到s函数的源代码sldemo_sfun_dlut3D.c和sldemo_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
在创建TLC块文件之后,功能legacy_code()可以再次与第一输入设置为“rtwmakecfg_generate”,以便产生通过编码器的Simulink一个rtwmakecfg.m文件来支持代码生成™调用。万博1manbetx万博1manbetx生成rtwmakecfg.m文件是否为S-功能所需的源文件和头文件不在同一目录中S-功能,并且要在代码生成过程中产生的Makefile中添加这些依赖关系。
注:完成只有当你要模拟加速模式模型这一步。
legacy_code('rtwmakecfg_generate',DEF);
在编译了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');