Повторный ввод кода - это многократно используемая подпрограмма программирования, которую могут использовать одновременно несколько программ. Операционные системы и другое системное программное обеспечение, использующее многопоточность для обработки параллельных событий, используют повторный ввод кода. В параллельной среде несколько потоков или процессов могут пытаться считывать и записывать статические данные одновременно. Поэтому общий доступ к коду, использующему постоянные или статические данные, затруднен. Код повторного ввода не содержит статических данных. Вызывающие программы поддерживают переменные состояния и передают их в функцию. Поэтому любое количество потоков или процессов может совместно использовать одну копию входящей подпрограммы.
Создание кода для повторного ввода при необходимости:
Развертывание кода в многопоточных средах.
Используйте алгоритм с постоянными данными, принадлежащими различным процессам или потокам.
Скомпилировать код, использующий переменные функции, которые слишком велики для размещения в стеке.
Если код входа не указан, MATLAB ® Coder™ генерирует код, который использует статически выделенную память для:
Переменные функции, слишком большие для размещения в стеке
Глобальные переменные
Постоянные переменные
Если созданный код использует статическое выделение памяти для этих переменных, невозможно развернуть созданный код в средах, требующих повторного ввода кода. Если не удается настроить размер распределения статической памяти, созданный код может привести к переполнению статического размера памяти.
При создании кода повторного ввода кодер MATLAB создает структуры входных данных для:
Переменные функции, слишком большие для размещения в стеке
Постоянные переменные
Глобальные переменные
Затем можно динамически распределить память для этих структур ввода. Использование динамического выделения памяти означает, что код можно развернуть в среде повторного ввода.
Чтобы развернуть созданный код, необходимо создать main функция, которая:
Включает файл заголовка primary_function_name.h.
Выделение памяти для глобальной структуры распределения памяти primary_function_nameStackData.
Если алгоритм использует постоянные или глобальные данные, выделяет память для глобальной структуры primary_function_namePersistentData.
Вызывает следующие функции:
primary_function_name_initialize.
primary_function_name.
primary_function_name_terminate.
При преобразовании функции MATLAB в библиотечную функцию C/C + + или исполняемый файл C/C + + программа MATLAB Coder генерирует две хозяйственные функции. Вызовите эти вспомогательные функции в коде, вызывающем сгенерированную функцию C/C + +. Дополнительные сведения см. в разделе Развертывание сгенерированного кода.