Ссылки на данные в файле model.rtw

Обзор ссылки на данные

Некоторым записям в файле model.rtw, таким как те, которые соответствуют параметрам и постоянному блоку I/O, можно было встроить чрезвычайно большие векторы значения данных в них. Такой вектор может вызвать значительную память наверху во время генерации кода, потому что значения должны сохраняться как текст в памяти во время этого процесса.

Чтобы избежать таких издержек, по умолчанию программное обеспечение Simulink® не выписывает целый вектор значения данных в model.rtw. Вместо этого это пишет, что ключ вызвал data reference, который может использоваться во время генерации кода, чтобы получить доступ к данным непосредственно из Simulink. Если данные не видоизменены во время генерации кода, они эффективно передаются потоком к диску, когда фактический код, содержащий значения данных, выписан.

Ссылка на данные имеет формат SLData(index), где index является числовым значением, которое говорит Simulink, на какие данные ссылаются. Директивы TLC, такие как ссылки на данные хранилища GENERATE_FORMATTED_VALUE в нерасширенном формате в памяти. Когда сгенерированный код выписан к диску, значения данных расширяются до фактических значений.

Управляйте порогом ссылки на данные

По умолчанию Simulink пишет ссылку на данные в model.rtw вместо вектора данных, длина которого равняется 10 или больше. Чтобы изменить максимальную длину вектора, который может появиться буквально в файле, используйте:

set_param(0, 'RTWDataReferencesMinSize', maxlen)

Simulink заменяет вектор в качестве длинного или более длинного, чем maxlen со ссылкой на данные, когда это создает model.rtw. Задайте maxlen как целое число или как inf. Определение inf отключает ссылки на данные. Полный набор значений каждого вектора, однако долго, затем появляется буквально в model.rtw и занимает текстовую память во время генерации кода.

Установка явного maxlen влияет только на текущий сеанс MATLAB®. Чтобы установить значение через сеансы, включайте команду set_param в свой файл startup.m или автоматизируйте выполнение команды, когда MATLAB запустится.

Расширьте ссылки на данные

Можно явным образом расширить ссылку на данные при помощи встроенной функции GENERATE_FORMATTED_VALUE с дополнительным третьим аргументом expand. Команды, такие как FEVAL могут заставить ссылку на данные быть расширенной до полной формы.

Избегайте расширения ссылки на данные

Или выключение ссылок на данные полностью или расширение избранных параметров в TLC могут вызвать значительную текстовую память наверху во время процесса генерации кода. Во время наиболее распространенных задач генерации кода является ненужным иметь расширенный вектор данных в памяти и заплатить цену дополнительных издержек. Избегайте расширенных векторов данных, если никакая альтернатива не существует.

Перезапустите генерацию кода

Файл model.rtw, который содержит ссылки на данные, не может использоваться в изоляции, чтобы перезапустить процесс генерации пользовательского кода. Ссылки на данные в нем становятся устаревшими, если процесс генерации кода завершается. Попытка запустить процесс генерации кода с помощью только этот файл может привести к непредсказуемому поведению и отказам сегментации памяти.

Похожие темы