数据类型与arduino和coder.ceval不匹配
Datatype mismatch with arduino and coder.ceval
我正在使用Matlab函数方法为Arduino Due编写一个simulink设备驱动程序块,如Simulink设备驱动程序指南中所述。当我想使用 coder.ceval() 将双精度从 C++ 代码传递到 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 这样的大数字。有什么建议吗?
包含dout_output
声明的头文件是否包含在从 MATLAB 函数代码生成的 C 代码中?如果没有,您可能会看到编译器警告,其中说明了隐式int
返回类型。
当 C 编译器没有函数的声明时,它们可能会假定返回类型为 int
。通常sizeof(int) != sizeof(double)
.因此,这种不匹配可能会导致令人惊讶的结果。这个答案对此进行了更多讨论。
尝试添加:
coder.cinclude('dout_output.h');
到您的 MATLAB 代码中,其中dout_output.h
被替换为包含 dout_output
声明的标头的名称。
您可能还需要将包含目录添加到自定义代码设置中:
"Configuration Parameters->Simulation Target->Custom Code->Include Directories"
并且可能:
"Configuration Parameters->Code Generation->Custom Code->Include Directories"
或者,您可以使用coder.ExternalDependency
方法来封装 MATLAB 代码的外部代码依赖项。
相关文章:
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- 在使用累加时,C++中的运算符+不匹配
- C++ 与操作员不匹配<<
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 与'operator='不匹配(操作数类型'String'且"void")
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- C4018:类内有符号、无符号不匹配
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 为什么我收到错误:"运算符<<不匹配?
- RE2 不匹配非 ASCII 字符
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- 为什么我的数组值与此处的全局变量不匹配?
- 引号之间匹配/不匹配,带有不可避免的引号和多行
- 映射迭代器与运算符不匹配
- C++调用和定义不匹配
- 数据类型与arduino和coder.ceval不匹配