使用 coder.load 加载 MAT 文件时,Matlab Coder 在结构数组中抛出混合字段类型错误

Matlab Coder throws mixed field type error in structure array while loading MAT file with coder.load

我正在处理一个 MATLAB Coder 项目,我想在其中加载一些常量值。在尝试了多种可能性之后,都没有成功,我想到了 "coder.load" 指令,该指令从 MAT 文件加载变量并假定它们作为生成的 C 代码中的编译时常量。

这是我得到的错误:

Found unsupported class for variable using function 'coder.load'. Mixed field types in structure arrays are not supported. Type at 'ind_x.params(1).name' differed from type at 'ind_x.params(2).name'.

但问题是 "params" 结构数组的 "name" 字段对于每个数组元素具有相同的类型。事实上,在命令 window 上尝试它会给我相同的类型:

>> class(ind_x.params(1).name)
ans =
char
>> class(ind_x.params(2).name)
ans =
char

结构数组的其他字段是"double"类型,其中一个字段是"bool"类型,但同一字段的不同数组元素内类型不会改变,即为什么我不明白这个错误。

好的,我想我找到了问题的答案。问题确实是字符串长度。如果结构数组的字段之一是 "char" 类型,则每个数组元素的长度必须相同。 也就是说,如果你定义

ind_x.params(1).name = 'john';
ind_x.params(2).name = 'harry';

如果您尝试使用 coder.load() 加载该结构,它将引发错误,因为 length(ind_x.params(1).name)length(ind_x.params(2).name) 不同。解决方法可能是定义最大长度并向字符串添加尾随空格。

这个限制可能来自于 C 中的常量定义,但我发现混乱的是误导性的错误消息。无论如何感谢您的帮助!

编辑: 我意识到上述对常量结构数组的限制不仅对类型 "char" 有效,而且对所有类型都有效!不能有长度在不同数组元素中变化的字段。