Simulink 代码生成:来自 Function Caller 模块的函数存根及其返回值/参数

Posted

技术标签:

【中文标题】Simulink 代码生成:来自 Function Caller 模块的函数存根及其返回值/参数【英文标题】:Simulink code generation: function stubs from Function Caller blocks and their return values/arguments 【发布时间】:2021-10-14 03:42:00 【问题描述】:

在我的 Simulink 模型中,我有几个 Function Caller 模块,如下所示: Simple Function Caller block

函数原型就是y = someFunction()。输出参数使用自定义枚举类型,并以someEnum(1) 形式给出。

输出信号被定义为一维的。

当从模型生成代码时,这些函数调用者总是产生一个预期形式的函数存根

extern someEnum someFunction(void);.

然而,在最近发生了很多变化之后,我刚刚注意到代码生成现在突然产生了形式为

的函数存根

extern void someFunction(someEnum *rty_y);

对于一些(不是全部!)Function Caller 块。

我已经比较了有关函数调用程序块的每个参数以及我能找到的相关输出信号,但我找不到受影响的那些与当前版本中按预期工作的那些或以前版本中的相同块之间的任何区别.所有函数和信号都已重命名,但对于那些不受影响的 Function Caller 块也是如此。

代码生成选项也相同。

我试图从帮助文件中了解什么可能导致编码器使用指针参数而不是函数存根的直接返回值,但找不到任何东西。

任何可能导致代码生成器使用指针的提示将不胜感激。

【问题讨论】:

【参考方案1】:

发现问题。一些受影响的块在其“配置 C/C++ 函数接口”对话框中将其 C/C++ 返回参数设置为“void”。

一些受影响的块(不幸的是,我之前检查过的两个块)仍然在这里设置为“y”,我不得不将设置更改为“void”并返回到“y”,然后它才产生想要的结果。

【讨论】:

以上是关于Simulink 代码生成:来自 Function Caller 模块的函数存根及其返回值/参数的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB C S-Function不能在simulink实时编译

在 Simulink Real-Time 的 M 文件 S-Function 中使用 C-Mex 函数

simulink仿真错误:MATLAB Function Interface Error

simulink error:Error in default port dimensions function of S-function ‘XXXXXXXXXXX’. This function

simulink中的matlab function函数怎么设置初值?

我收到有关 simulink 的错误消息“未在某些执行路径上分配输出参数”