Ошибка твердости: неверный тип данных

Проблема

В этом примере y использует fimath по умолчанию установка FullPrecision для SumMode свойство. В каждой итерации цикла for в функциональном mysum, размер слова y растет на один бит.

В процессе моделирования в MATLAB®, нет никакой проблемы, потому что типы данных могут легко измениться в MATLAB. Однако ошибка неверного типа данных происходит во время изготовления, потому что типы данных должны остаться статическими в C.

Возможные решения

Перепишите функцию, чтобы использовать преобразованное в нижний индекс присвоение в цикле for.

В этом примере перепишите y = y + x (n) как y (:) = y + x (n), так, чтобы значение справа было присвоено в типу данных y. Это присвоение сохраняет numerictype из y и избегает ошибки несоответствия типов.

Исходный алгоритмНовый алгоритм

Функция:

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

Смотрите также

Похожие темы