概述
替换过程
对于许多基于模型的设计应用,除了 Simulink® 模型之外,设计还包括一组经过测试和验证的现有 C 函数。您可以将这些函数集成到一个 Simulink® 模型中,并生成使用这些函数的代码。
在本示例中,您将创建一个调用现有 C 函数的自定义 Simulink® 模块。然后,将该模块包含在一个模型中,并通过在 Simulink® 中进行模型仿真来测试整个系统。
在示例模型中,您可以将 PI 控制器中的 Lookup 模块(查找表)替换为对一个现有 C 函数的调用。该函数在文件 SimpleTable.c 和 SimpleTable.h 中定义。
创建调用 C 函数的模块
要指定对现有 C 函数的调用,请使用 S-Function 模块。您可以使用代码继承工具自动创建 S-Function 模块。在该工具中,您将首先为现有 C 函数指定接口。然后,工具使用该接口创建一个 S-Function 模块。
使用代码继承工具为 SimpleTable.c 中的现有 C 函数创建一个 S-Function 模块。
def = legacy_code('initialize')
您可以使用结构体 def 定义现有 C 代码的函数接口。
legacy_code('sfcn_cmex_generate',def)
legacy_code('compile',def)
legacy_code('slblock_generate',def)
生成的 S-Function 模块调用 SimpleTable.c 中的 C 函数。您现在可以在模型中使用此 S-Function 模块。
legacy_code('sfcn_tlc_generate',def)
此命令创建一个 TLC 文件,该文件是 S-Function 的一个组件,指定如何为模块生成代码。
通过仿真验证外部代码
在 Simulink® 模型中集成现有 C 代码时,将验证生成的 S-Function 模块。
要验证 Lookup 模块的替换,请将 Lookup 模块产生的仿真结果与新 S-Function 模块产生的结果进行比较。
Sine Wave 模块从 [-2 :2] 产生输出值。
查找表的输入范围来自 [-1 :1]。
查找表输出输入的绝对值。
查找表根据输入范围对输出进行裁剪。
下图显示验证结果。现有 C 代码和 Simulink® 表模块产生相同的输出值。
将 C 代码作为 Simulink® 模型的一部分进行验证
将现有 C 函数代码作为独立组件进行验证后,在模型中验证 S-Function。要完成验证,请使用测试框架模型。
仿真结果与黄金值匹配。
从生成的代码调用 C 函数
代码生成器使用 TLC 文件处理 S-Function 模块,就像处理任何其他模块一样。代码生成器可以使用 S-Function 模块实现表达式折叠,这是一种将多个计算合并到一个输出计算中的操作。
生成的代码现在调用 SimpleTable C 函数。
下面的图显示生成的代码在 C 代码集成之前和之后的情况。在集成之前,代码调用生成的查找例程。在集成之后,生成的代码调用 C 函数 SimpleTable。
最后
以上就是热情酒窝为你收集整理的c代码生成matlab模块,从模型和生成的代码调用外部 C 代码的全部内容,希望文章能够帮你解决c代码生成matlab模块,从模型和生成的代码调用外部 C 代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复