Matlab 编码器:Matlab 数组到 C 数组

Posted

技术标签:

【中文标题】Matlab 编码器:Matlab 数组到 C 数组【英文标题】:Matlab Coder : Matlab Array to C Array 【发布时间】:2015-08-31 02:37:59 【问题描述】:

我使用 matlab coder 将 matlab 代码转换为 C。我在 matlab 中定义的简单数组被转换为 C 中的复杂结构。

struct emxArray_real_T

  double *data;
  int *size;
  int allocatedSize;
  int numDimensions;
  boolean_T canFreeData;
;

如果有人能阐明如何使用这个结构,那将是非常有帮助的。

【问题讨论】:

“如何使用这个结构”是什么意思?你对如何使用结构感兴趣吗? 我建议阅读文档:C Code Interface for Arrays。如果这不能回答您的问题,那么您应该将其编辑得更具体。 【参考方案1】:

之所以创建 emxArray_real_T 类型,是因为 MATLAB Coder 无法确定 MATLAB 中数组的固定大小或足够小的范围,例如 2x3。在这种情况下,生成的代码允许数组的大小在运行时通过使用动态内存分配(例如malloc)和这个数据结构来表示您在 C 中的 MATLAB 数组。这些在 MATLAB 中称为动态分配的可变大小数组Coder 文档和 struct 字段用于跟踪生成代码中动态分配的内存。

关于使用此类数组,@horchler 推荐的 documentation 是一个不错的起点。此外,您可以查看此other answer,它描述了在存储数据为uint32 而不是doublereal_T 时使用相同struct 的基础知识。

【讨论】:

非常感谢!这正是我想要的。 @user4009004,不客气,很高兴听到这个消息!【参考方案2】:

数组是相同数据类型的集合,而结构是不同数据类型的集合。

在 Matlab 中,数组可以包含所有数据类型的变量。

这就是为什么当您尝试从 Matlab 数组转换为 C 数组时,它会转换为 C 结构而不是 C 数组,因为您的 Matlab 数组包含不同的数据类型。

【讨论】:

emxArray 数据类型用于无法计算静态大小或相应 MATLAB 数组大小的足够静态边界时。它们不允许更改给定数组的数据类型。您会注意到数据指针声明为double*,这意味着该数组将仅包含double 类型的数据。【参考方案3】:

C 编程语言(和许多衍生语言)中的struct 是一种复杂的数据类型声明,它定义了一个物理分组的变量列表,这些变量以一个名称放在一块内存中,允许访问不同的变量通过单个指针或返回相同地址的结构声明名称。该结构可以在关联中包含许多其他复杂和简单的数据类型。

因此,C 中的 Struct 基本上是一个物理分组的变量列表数组。

如果您真的只想使用简单的数组,请查看here 的基本工作和语法。 和here 用于结构及其基本工作和语法。

【讨论】:

以上是关于Matlab 编码器:Matlab 数组到 C 数组的主要内容,如果未能解决你的问题,请参考以下文章

数组和 matlab 编码器的问题

用matlab啥方法将二进制数转为数组

“matlab”矩阵的长度怎么计算?

Matlab当中size() length()等函数讲解

matlab中的length表示啥?应该如何使用?

Matlab两个一维数组合并为一个数组?