exponenta event banner

Повторный ввод кода

Повторный ввод кода - это многократно используемая подпрограмма программирования, которую могут использовать одновременно несколько программ. Операционные системы и другое системное программное обеспечение, использующее многопоточность для обработки параллельных событий, используют повторный ввод кода. В параллельной среде несколько потоков или процессов могут пытаться считывать и записывать статические данные одновременно. Поэтому общий доступ к коду, использующему постоянные или статические данные, затруднен. Код повторного ввода не содержит статических данных. Вызывающие программы поддерживают переменные состояния и передают их в функцию. Поэтому любое количество потоков или процессов может совместно использовать одну копию входящей подпрограммы.

Создание кода для повторного ввода при необходимости:

  • Развертывание кода в многопоточных средах.

  • Используйте алгоритм с постоянными данными, принадлежащими различным процессам или потокам.

  • Скомпилировать код, использующий переменные функции, которые слишком велики для размещения в стеке.

Если код входа не указан, 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 + +. Дополнительные сведения см. в разделе Развертывание сгенерированного кода.

Связанные темы