Main Content

解决错误:数据类型不匹配

问题

在此示例中,y 对 SumMode 属性使用默认 fimath 设置 FullPrecision。在函数 mysum 中,for 循环每迭代一次,y 的字长增加一位。

在 MATLAB® 的仿真期间,不存在任何问题,因为在 MATLAB 中数据类型很容易更改。但是,在编译时会出现数据类型不匹配错误,因为数据类型在 C 语言中必须保持静态。

可能的解决方案

重写函数以在 for 循环中使用下标赋值。

在此示例中,将 y = y + x(n) 重写为 y(:) = y + x(n),以便将右边的值赋给数据类型 y。此赋值保留 y 的 numerictype,并避免类型不匹配错误。

原算法新算法

函数:

function y = mysum(x,T)  %#codegen  
	 y = zeros(size(x), 'like', T.y);
    for n = 1:length(x)
        y = y + x(n);
    end
end

函数:

function y = mysum(x,T)  %#codegen  
	 y = zeros(size(x), 'like', T.y);
    for n = 1:length(x)
        y(:) = y + x(n);
    end
end

类型表:

function T = mytypes(dt)
	switch(dt)
        case 'fixed'
        F = fimath('RoundingMethod', 'Floor')
        T.x = fi([],1,16,11, F);
        T.y = fi([],1,16,6, F);
    end
end

类型表:

function T = mytypes(dt)
	switch(dt)
        case 'fixed'
        F = fimath('RoundingMethod', 'Floor')
        T.x = fi([],1,16,11, F);
        T.y = fi([],1,16,6, F);
    end
end

另请参阅

相关主题