【问题标题】:Matab tlc code for s-functions having multiple instances具有多个实例的 s-functions 的 Matab tlc 代码
【发布时间】:2017-03-15 11:45:26
【问题描述】:

我需要在我的 simulink 模型中内联一个具有多个实例的 s-function。在 S-function 中,我需要加载一个 dll 文件,但它应该只在一个 s-function 实例中完成。我写的 tlc 如下: ...... % function Start(block, system) 输出

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

代码生成后,这些 Start 函数行被添加到每个 s-function 实例的源代码中。但是,我需要加载一次 dll。是否可以仅为 s-function 的第一个实例添加这些行?

注意:我知道在 TLC 文档中,当模型中有多个 s-function 实例时,它声明要避免内联。

【问题讨论】:

    标签: matlab code-generation s-function


    【解决方案1】:

    这是来自一些朦胧的记忆,但我认为你可以使用全局喜欢:

    %assign ::DLL_LOADED = 0
    
    %function Start()
    
    %if :: DLL_LOADED == 0
        %% load DLL here
        %assign ::DLL_LOADED = 1
    %endif
    

    我认为这样的事情会奏效。

    【讨论】:

      【解决方案2】:

      最简单的做法是将这些行放在一个外部文件中,并使用静态变量来跟踪一次性初始化。然后从 Start 函数添加对该函数的调用。如果您想从 tlc 生成该外部文件,请查看 BlockTypeSetup TLC 函数和 LibAddToModelSources 以将源文件添加到生成的代码中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多