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

Проблема

В этом примере 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

См. также

Похожие темы