Matlab с внешней функцией C ++: coder.ceval передает структуру функции

0

Я пытаюсь передать структуру из функции Matlab в Simulink на внешнюю функцию C++, используя coder.ceval() и coder.cstructname(). Когда я пытаюсь запустить код на плате Arduino Due, используя инструмент развертывания для аппаратного обеспечения в Simulink, я получаю сообщение об ошибке:

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

Im использует код примера из mathworks, но вместо функции ac использует функцию C++:

Заголовок 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"  // Doesnt 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++ для более позднего кода. Однако я также попробовал его с функцией ac без экстерна "C", но он все равно не работает. Может ли кто-нибудь помочь мне с этой проблемой?

Теги:
arduino
simulink
matlab-coder

1 ответ

0
Лучший ответ

Я нашел решение. Я должен был включить заголовок c use_struct.h в use_struct.cpp также с помощью:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню