将C函数与使用MATLAB Coder构建的多个输出集成

时间:2015-10-04 22:08:48

标签: c matlab function integration matlab-coder

我一直在MATLAB中编码,我设法将我的工作转换为单个函数,但它有几个输入和输出。为简单起见,我们假设它接收三个输入:X(矢量和只读),Y(矢量和读写)和Z(标量和写作)只要)。感谢回复here我能够理解我必须使用特殊的MATLAB类型创建变量,以便预先分配空间,然后在C代码中将它们作为参数发送到我的函数中。

具有单个标量输出(Z)的初始版本按预期工作,但是采取多个输出的下一步提出了一些问题。我会尽量简洁。将Z更改为向量后,这是我的函数在MATLAB和C代码中的标题:

[Y,Z]=foo(X,Y)

void foo(const unsigned int *X, float Y[n_Y], float Z[n_Z])

到目前为止,这些是我的疑惑。

1 - 我希望如果Z仅在内部创建,它不应该作为C函数的输入出现。我应该怎么做才能在功能之外获得它?我的想法是提供一个同名的伪变量,以后会被覆盖。

2 - 如果正在更改Y,则该函数应该接收指向Y的指针。是这样更新的吗?

3 - 现在将尺寸设置为X为(1x:inf),这会导致指针显示出来。如果我更改为更小且更逼真的边界,那么单个输入将转换为两个,尽管没有其他更改(C中的变量创建是独立的)。现在有const unsigned int X_data[], const int X_size[2]而不是const unsigned int X。我应该如何在C代码中处理它?<​​/ p>

C中对函数的调用如下:

emxArray_uint32_T *X=emxCreate_uint32_T(1,n_X);
static emxArray_uint32_T *Y=emxCreate_real32_T(1,n_Y), *Z=emxCreate_real32_T(1,n_Z);

foo(X,&Y,&Z);

emxDestroyArray_uint32_T(X);

我应该说我没有尝试编译最新的步骤,因为我需要一个特定的环境(实验室)。但是,当我有权访问它时,代码几乎准备好了。而且,如果不解决这些疑虑,我想我不应该这样做。如果它以某种方式工作,我不明白为什么,那就是不工作。

0 个答案:

没有答案