Код Matab tlc для s-функций, имеющих несколько экземпляров

мне нужно встроить s-функцию, имеющую несколько экземпляров в моей модели simulink. В S-функции мне нужно загрузить файл dll, но это нужно сделать только в одном экземпляре s-функции. Я написал tlc следующим образом: ..... % function Start(block, system) Output

dll_handle = LoadLibraryA("mydll"); dll_setup=(DLL_SETUP)GetProcAddress(dll_handle,"setup"); .....

После генерации кода эти строки функции Start были добавлены в исходный код для каждого экземпляра s-функции. Однако мне нужно загрузить dll один раз. Можно ли добавить эти строки только для первого экземпляра s-функции?

Примечание. Я знаю, что в документации TLC указано, что следует избегать встраивания, когда в модели есть несколько экземпляров s-функции.


person Anil Ozturk    schedule 02.11.2016    source источник


Ответы (2)


Проще всего было бы поместить эти строки во внешний файл и использовать статические переменные для отслеживания одноразовой инициализации. Затем добавьте вызов этой функции из функции Start. Если вы хотите сгенерировать этот внешний файл из tlc, загляните в функцию BlockTypeSetup TLC и LibAddToModelSources, чтобы добавить исходный файл в сгенерированный код.

person Navan    schedule 03.11.2016

Это из некоторых смутных воспоминаний, но я думаю, вы можете использовать глобальный, например:

%assign ::DLL_LOADED = 0

%function Start()

%if :: DLL_LOADED == 0
    %% load DLL here
    %assign ::DLL_LOADED = 1
%endif

Я думаю, что-то подобное будет работать.

person macduff    schedule 02.11.2016