从模型和生成的代码调用外部C代码
使用遗留代码工具从模拟或生成的代码中调用现有的外部函数。
学习如何:
评估一个C函数作为Simulink®模型仿真的一部分。
从从模型生成的代码中调用C函数。
有关示例模型的信息,请参见为C代码生成准备一个控制算法模型.
更换过程
打开示例模型,rtwdemo_PCG_Eval_P4
.
对于许多基于模型的设计应用程序,除了Simulink®模型之外,设计还包括一组已经过测试和验证的现有C函数。您可以将这些函数集成到Simulink®模型中,并生成使用这些函数的代码。
在本例中,您将创建一个自定义Simulink®块,该块调用现有的C函数。然后将块包含在模型中,并通过Simulink®中的模型仿真测试整个系统。
在示例模型中,可以用对现有C函数的调用替换PI控制器中的Lookup块(查找表)。函数在文件中定义SimpleTable.c
而且SimpleTable.h
.
创建调用C函数的块
要指定对现有C函数的调用,请使用S-Function块。您可以使用遗留代码工具自动创建S-Function块。在该工具中,首先为现有的C函数指定一个接口。然后,该工具使用该接口创建S-Function块。
使用遗留代码工具为现有的C函数创建S-Function块SimpleTable.c
.
Def = legacy_code(“初始化”)
你可以使用这个结构def
定义现有C代码的函数接口。
2.填充结构的字段。
3.创建s函数。
legacy_code (“sfcn_cmex_generate”def)
4.编译s函数。
legacy_code (“编译”def)
legacy_code (“slblock_generate”def)
生成的S-Function块调用中的C函数SimpleTable.c
.你现在可以在模型中使用这个S-Function块。
6.创建TLC文件。
legacy_code (“sfcn_tlc_generate”def)
该命令创建一个TLC文件,该文件是S-Function的组件,用于指定如何为块生成代码。
通过模拟验证外部代码
在Simulink®模型中集成现有C代码时,验证生成的S-Function块。
要验证Lookup块的替换,请将Lookup块生成的模拟结果与新的S-Function块生成的结果进行比较。
1.打开验证模型。
正弦波块从[-2:2]产生输出值。
查找表的输入范围是[-1:1]。
查找表输出输入的绝对值。
查找表在输入限制处截取输出。
2.运行验证模型。
验证结果如图所示。现有的C代码和Simulink®表块产生相同的输出值。
验证C代码作为Simulink®模型的一部分
在将现有的C函数代码验证为独立组件之后,验证模型中的s函数。要完成验证,请使用测试集束模型。
1.打开测试套具。
2.运行测试工具。
仿真结果符合黄金值。
从生成的代码调用C函数
代码生成器使用TLC文件像处理其他块一样处理S-Function块。代码生成器可以实现表达折叠使用S-Function块,将多个计算组合为单个输出计算的操作。
1.构建完整的模型。
2.中生成的代码PI_Control_Reusable.c
.
生成的代码现在调用SimpleTable
C函数。
图中显示了C代码集成前后生成的代码。在集成之前,代码调用生成的查找例程。集成完成后,生成的代码调用C函数SimpleTable
.