文档

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

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

Legacy Code Tool允许您:

  • 提供遗留功能规范,

  • 生成一个C-MEX s -函数,该函数在模拟过程中用于调用遗留代码

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

提供遗留功能规范

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

FLT directLookupTableND(const FLT *tableND, const UINT32 nbdimms, const UINT32 *tableIdx)

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

def = [];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”};def = [def;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”};def = [def;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/mathworks/devel/bat/BR2018ad/build/matlab/toolbox/simulink/simd万博1manbetxemos/simfeatures/sldemo_lct_src', '-I/tmp/BR2018ad_802882_51908/publish_examples3/tp4a7c15ec', '-c', '-outdir', '/tmp/BR2018ad_802882_51908/publish_examples3/tp334ac1bb_839b_4c76_95f0_bf7e63a64c12', '),“/mathworks/devel/bat/BR2018ad/build/matlab/toolbox/万博1manbetxsimulink/simdemos/simfeatures/sldemo_lct_src/ directlookuptabend .c”)使用“gcc”构建。墨西哥人成功完成。墨西哥人(“sldemo_sfun_dlut3D.c”、“我/ mathworks猛击/棒/ BR2018ad /构建/ matlab工具箱/模型/ simdemo万博1manbetxs / simfeatures / sldemo_lct_src’,‘我/ tmp / BR2018ad_802882_51908 / publish_examples3 tp4a7c15ec ', ' / tmp / BR2018ad_802882_51908 / publish_examples3 / tp334ac1bb_839b_4c76_95f0_bf7e63a64c12 / directLookupTableND.o”)建设与gcc。墨西哥人成功完成。### #完成编译sldemo_sfun_dlut3D ### #退出### #开始编译sldemo_sfun_dlut4D mex('-I/mathworks/devel/bat/BR2018ad/build/matlab/toolbox/simulink/simdemos/simfeat万博1manbetxures/sldemo_lct_src', '-I/tmp/BR2018ad_802882_51908/publish_examples3/tp4a7c15ec', '-c', '-outdir'),/tmp/BR2018ad_802882_51908/publish_examples3/tp3a950e36_8c93_4465_b430_ba18d37c811c', '/mathworks/devel/bat/BR2018ad/build/matlab/toolbox/s万博1manbetximulink/simdemos/simfeatures/sldemo_lct_src/ directlookuptabend .c')墨西哥人成功完成。墨西哥人(“sldemo_sfun_dlut4D.c”、“我/ mathworks猛击/棒/ BR2018ad /构建/ matlab工具箱/模型/ simdemo万博1manbetxs / simfeatures / sldemo_lct_src’,‘我/ tmp / BR2018ad_802882_51908 / publish_examples3 tp4a7c15ec ', ' / tmp / BR2018ad_802882_51908 / publish_examples3 / tp3a950e36_8c93_4465_b430_ba18d37c811c / directLookupTableND.o”)建设与gcc。墨西哥人成功完成。 ### Finish Compiling sldemo_sfun_dlut4D ### Exit

生成一个rtwmakecfg。m用于代码生成的文件

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

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

legacy_code (“rtwmakecfg_generate”def);

生成一个蒙面s功能块,用于调用生成的s功能

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

% legacy_code (slblock_generate, def);

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

该模型sldemo_lct_lut显示与遗留代码的集成。子系统TestFixpt用作调用遗留C函数的工具,Display块将函数的输出与内置的Simulink®查找块的输出进行比较;万博1manbetx结果是相同的。

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

这个话题有用吗?