我的simulink嵌入式功能有一个固定的输入和输出。 但是我想在函数内部计算一个可变大小的元素(仅用于计算)。
因此,我不希望将块声明为接收或发送动态大小信号。 (或使用coder.varsize)
前:
K = find( p_var(:) == 0 ); % p_var is a vector containing some zeros
p_var(K) = []; % p_var is a therefore a varsize vector
% the variability is something I need for reason
n = length(p_var) % n is dynamic
M = ones(10,n) % M & L are also dynamic
L = ones(n,50)
G = M*L; % G is fixed of size [10*50]
这里变量G总是固定的......但我有这种错误:
Dimension 2 is fixed on the left-hand side but varies on the right ([1 x 9] ~= [1 x :?])
感谢您的时间。
答案 0 :(得分:1)
您必须为p_var
的大小定义上限。这可以通过几种方式完成,例如使用coder.varsize
,如下所示。
还有其他几点需要注意:
如果p_var
是您的函数的输入,则无法更改其大小,但需要一个临时变量,如下所示。
您很可能不想像现在这样使用find
,而应该使用逻辑索引。
function G = fcn(u)
p_var = u;
coder.varsize('p_var', [10,1]);
p_var(p_var(:) == 0) = []; % p_var is therefore a varsize vector
the variability is something I need for reason
n = length(p_var); % n is dynamic
M = ones(10,n); % M & L are also dynamic
L = ones(n,50);
G = M*L; % G is fixed of size [10*50]