简单的回答是:通过索引一个数组的末尾来增加一个数组是
not supported
使用编码器。
所以你的循环增加了
events
Coder不支持每次迭代。您可以使用:
function [ events ] = foo(data)
%#codegen
events = struct('typ' ,int32(0),...
'title' ,int32(1),...
'value' ,double(0),...
'sta' ,int32(2),...
'end' ,int32(3));
for n = 1:length(data.temperatur_spikes_daily)
events = [events, struct('typ' ,int32(101),...
'title' ,int32(1234),...
'value' ,double(1234),...
'sta' ,int32(4321),...
'end' ,int32(3412))];
end
或:
function [ events ] = foo(data)
%#codegen
% Allocate events
s = struct('typ' ,int32(0),...
'title' ,int32(1),...
'value' ,double(0),...
'sta' ,int32(2),...
'end' ,int32(3));
events = coder.nullcopy(repmat(s, 1, length(data.temperatur_spikes_daily)));
% Populate values of events
for n = 1:numel(events)
events(n).typ = int32(101);
events(n).title = int32(1234);
events(n).value = double(1234);
events(n).sta = int32(4321);
events(n).end = int32(3412);
end
相反
如果您从原始代码而不是独立代码生成MEX函数,并在MATLAB中运行此MEX函数时,将出现错误:
Index exceeds matrix dimensions. Index value 2 exceeds valid range [1-1] of array events.
Error in foo (line 15)
events(ii).typ = int32(101);
生成并运行MEX函数是验证MATLAB代码是否使用Coder支持的构造的最佳方法。