exponenta event banner

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

Проблема

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

Во время моделирования в 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

См. также

Связанные темы