主要内容

传统功能中的复杂信号

此示例向您展示了如何使用旧版代码工具使用复杂信号集成旧版C函数。

旧版代码工具允许您:

  • 提供旧功能规范,

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

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

提供旧功能规范

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

void cplx_gain(creal_t *输入,creal_t *增益,creal_t *输出);

其中creal_t是双重的复杂表示。遗产源代码在文件中找到cplxgain.hcplxgain.c

%sldemo_sfun_gain_scalardef = legacy_code('初始化');def.sfunctionName ='sldemo_sfun_cplx_gain';def.outputfcnspec ='void cplx_gain(复杂 u1 [1],复杂 p1 [1],复杂 y1 [1])';def.headerfiles = {'cplxgain.h'};def.sourcefiles = {'cplxgain.c'};def.incpaths = {'sldemo_lct_src'};def.srcpaths = {'sldemo_lct_src'};

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

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

legacy_code('generate_for_sim',def);
### Start Compiling sldemo_sfun_cplx_gain mex('-I/tmp/Bdoc22a_1891349_107669/tp2e4adc6e/ex34942047/sldemo_lct_src', '-I/tmp/Bdoc22a_1891349_107669/tp2e4adc6e/ex34942047', '-c', '-outdir', '/tmp/Bdoc22a_1891349_107669/tpad5ba40e_d3d4_4b23_bfaa_44df255bee08', '/tmp/Bdoc22a_1891349_107669/tp2e4adc6e/ex34942047/sldemo_lct_src/cplxgain.c') Building with 'gcc'.MEX成功完成。mex('sldemo_sfun_cplx_gain.c', '-I/tmp/Bdoc22a_1891349_107669/tp2e4adc6e/ex34942047/sldemo_lct_src', '-I/tmp/Bdoc22a_1891349_107669/tp2e4adc6e/ex34942047', '/tmp/Bdoc22a_1891349_107669/tpad5ba40e_d3d4_4b23_bfaa_44df255bee08/cplxgain.o') Building与“ GCC”。MEX成功完成。###完成编译SLDEMO_SFUN_CPLX_GAIN ###退出

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

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

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

legacy_code('rtwmakecfg_generate',def);

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

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

%lectacy_code('slblock_generate',def);

与传统代码集成

该模型sldemo_lct_cplxgain显示与旧版代码的集成。子系统复合物_gain是通过生成s函数来调用传统C函数的安全带。

如果isempty(find_system('searchDepth',0,'姓名',,,,'sldemo_lct_cplxgain')open_system('sldemo_lct_cplxgain')open_system('sldemo_lct_cplxgain/complex_gain')SIM('sldemo_lct_cplxgain');结尾

也可以看看