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