具有外部C ++函数的Matlab:coder.ceval将结构传递给函数

时间:2015-02-04 10:45:01

标签: c++ matlab arduino simulink matlab-coder

我正在尝试使用coder.ceval()和coder.cstructname()将结构从Simulink中的Matlab函数传递给外部C ++函数。当我尝试使用Simulink中的部署到硬件工具在Arduino Due板上运行代码时出现错误:

error: invalid use of incomplete type 'struct MyStruct' 
error: forward declaration of 'struct MyStruct'

我正在使用mathworks中的示例代码,但使用的是c ++函数而不是c函数:

Header use_struct.h:

#include <tmwtypes.h>

typedef struct MyStruct
{
    double s1;
    double s2;
} MyStruct;

void use_struct(struct MyStruct *my_struct);

C ++函数use_struct.cpp:

 #include <stdio.h>
 #include <stdlib.h>
// #include "use_struct.h"  // Doesn’t work when I include it here


extern “C” void use_struct(struct MyStruct *my_struct)
{
  double x = my_struct->s1;
  double y = my_struct->s2;
}

Matlab功能:

structVar.s1 = 1;
structVar.s2 = 2;

if strcmp(coder.target,'rtw'),


coder.cinclude('use_struct.h');
coder.cstructname(structVar, 'MyStruct', 'extern');

coder.ceval('use_struct', coder.ref(structVar));

end

我需要它作为后面代码的C ++函数。但是我也尝试了没有extern“C”的c函数,但它无论如何都不起作用。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我必须在use_struct.cpp中包含c头use_struct.h,并使用:

extern "C"
 {
   #include "use_struct.h"
 }