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