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