В этом примере показано, как преобразовать таблицу поиска с одной точностью для использования половинной точности. Половинная точность - тип склада; вычисления таблицы поиска продолжают выполняться с использованием одной точности. После преобразования эти примеры вдвое уменьшают размер памяти блоков таблицы поиска, сохраняя при этом требуемую производительность системы.
1. Откройте окно airflow_calc подсистема sldemo_fuelsys пример модели. Он содержит блоки таблицы подстановки с таблицей одиночной точности и данными точек останова, которые должны быть преобразованы в половинную точность.
load_system('sldemo_fuelsys'); open_system('sldemo_fuelsys/fuel_rate_control/airflow_calc');

2. В MATLAB ® измените текущую папку на папку с возможностью записи.
3. Убедитесь в том, что таблицы и точки останова Pumping Constant и Ramp Rate Ki Lookup Table являются едиными типами данных.
4. Выберите выходные сигналы для обоих блоков таблицы поиска. Отметьте их для ведения журнала. Моделирование модели в обычном режиме и использование выходных данных этого прогона в качестве базовой линии.

1. Получение данных таблицы и переменной точки останова из рабочего пространства модели для указанного блока таблицы подстановки. Например, с помощью блока «Постоянная накачки»:
mdlWks = get_param('sldemo_fuelsys','ModelWorkspace'); currentBlk = 'sldemo_fuelsys/fuel_rate_control/airflow_calc/Pumping Constant';
2. Проанализируйте данные таблицы и преобразуйте их в половинную точность, если они могут соответствовать типу половинной точности [-65504, 65504]. В инспекторе данных моделирования смоделируйте модель и сравните зарегистрированные выходные данные текущего блока с базовой линией. Убедитесь, что выходные данные находятся в пределах указанного абсолютного допуска и относительного допуска. Например, этот код устанавливает оба допуска на | 0.01 |.
expath = fullfile(matlabroot,'examples','fixedpoint','main'); addpath(expath); % Add the folder containing the supporting file to the path numBytesSaved(1) = analyzeDataConvertToHalf(mdlWks, currentBlk, 'Table');
3. Повторите шаг 2 задачи 2 для данных каждой из точек останова текущего блока. Данные точек останова должны оставаться монотонно увеличивающимися после преобразования из одинарной в половинную точность.
numBytesSaved(2) = analyzeDataConvertToHalf(mdlWks, currentBlk, 'BreakpointsForDimension1'); numBytesSaved(3) = analyzeDataConvertToHalf(mdlWks, currentBlk, 'BreakpointsForDimension2'); totalBytesSaved = sum(numBytesSaved(1:3));
4. Повторите шаги 2 и 3 задачи 2 для остальных блоков таблицы поиска в той же подсистеме. Затем проверьте количество байтов, сохраненных для таблицы и точек останова n-D блоков таблицы поиска.
currentBlk = 'sldemo_fuelsys/fuel_rate_control/airflow_calc/Ramp Rate Ki'; numBytesSaved(4) = analyzeDataConvertToHalf(mdlWks, currentBlk, 'Table'); numBytesSaved(5) = analyzeDataConvertToHalf(mdlWks, currentBlk, 'BreakpointsForDimension1'); numBytesSaved(6) = analyzeDataConvertToHalf(mdlWks, currentBlk, 'BreakpointsForDimension2'),
numBytesSaved = 684 36 38 72 12 12
totalBytesSaved = totalBytesSaved + sum(numBytesSaved(4:6)),
totalBytesSaved = 854
1. Моделирование преобразованной модели с помощью таблицы половинной точности и точек останова.
2. Сравните сигналы «fuel», «air _ fuel _ ratio» и т.д. с базовой линией в блоке «Scope» и в инспекторе данных моделирования. Убедитесь, что желаемая производительность все еще достигнута.


3. Сохраните модель с другим именем в папке, доступной для записи.
1. Щелкните правой кнопкой мыши подсистему fuel_rate_control и выберите C/C + + Code > Build This Subsystem. Чтобы создать код, нажмите кнопку Построить (Build) в диалоговом окне Построить код для подсистемы (Build code for Subsystem).
2. По завершении обработки сборки отображается отчет о создании кода.
3. Щелкните значок half_type.h и fuel_rate_control.c файлы. Обратите внимание на половинную точность (real16_T) определение типа, real16_T введите таблицу и указатели точек останова в look2_ifbhlfthDfIf_linlca интерфейс вызова функции.

4. Откройте окно fuel_rate_control.h и обратите внимание, что 854 байта были сохранены с использованием половинной точности в качестве типа хранения для таблиц и точек останова.

rmpath(expath);
close_system('sldemo_fuelsys',0);