我正在使用Matlab功能方法为Arduino Due编写一个simulink设备驱动程序块,如Simulink设备驱动程序指南中所述。当我想通过coder.ceval()将C ++代码中的double传递给matlab函数代码时,我得到一个错误的数字。这是一个例子:
C ++函数:
#include <Arduino.h>
extern "C" double dout_output()
{
return 50.5;
}
Simulink中的Matlab函数:
function x = example()
x = 0.0;
if strcmp(coder.target,'rtw'),
x = coder.ceval('dout_output');
end
当我在adruino上以外部模式运行此代码时,由于我没有得到50.5而是像1113794816这样的大数字。任何sugestions?
答案 0 :(得分:2)
包含dout_output
声明的头文件是否包含在从MATLAB函数代码生成的C代码中?如果没有,您可能会看到编译器警告说明隐式int
返回类型。
当C编译器没有函数声明时,他们可能会认为返回类型是int
。通常是sizeof(int) != sizeof(double)
。所以这种不匹配会导致令人惊讶的结果。 This answer讨论了更多内容。
尝试添加:
coder.cinclude('dout_output.h');
到您的MATLAB代码,其中dout_output.h
替换为包含dout_output
声明的标题的名称。
您可能还需要在以下位置的自定义代码设置中添加include目录:
"Configuration Parameters->Simulation Target->Custom Code->Include Directories"
可能:
"Configuration Parameters->Code Generation->Custom Code->Include Directories"
或者,您可以使用coder.ExternalDependency
方法封装MATLAB代码的外部代码依赖项。