有没有办法在几个C S函数之间共享一个C结构(仅实例化一次)?这就是我的意思:我有一个Simulink模型,其中包含许多实现为C S函数的模块。这些块中需要许多模型参数,我想创建一个包含所有模型参数的对象,并且在启动模拟时仅实例化一次。现在,我为每个S函数实例化该对象以访问参数,但是最好在S函数之间共享该对象。

只是一个纯粹的猜测:我可以将模型参数结构放在单独的DLL中,然后再从每个C S函数访问它吗?你们当中有人做过吗?

最佳答案

我已经成功实现并测试了DLL的想法(即,将所有模型参数收集在DLL中的结构中-加上任何必要的计算-并将其链接到其他CS函数)。 Simulink是一个单一的过程,我相信模拟是一个单一的线程(如果没有的话,有一些方法可以使其成为线程安全的)。

带有来自DLL的模型参数的结构充当单例(每次仿真仅实例化一次,并在其他S函数之间共享)。

更新(来自mathworks的一些回复):

Simulink的模拟部分始终为单线程。因此,共享DLL没有线程安全问题。

不同S功能块的全局变量将共享相同的存储位置。这意味着将为所有Simulink加载共享库的单个实例。因此,所有加载共享库的S函数实例都将引用相同的共享库和数据。

或者,您也可以考虑使用数据存储块来实现全局变量。这将需要从每个S功能到适当的数据存储模块的信号连接。但是,不需要S功能之间的连接。

关于c - 如何在C S函数之间共享C结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17966799/

10-11 19:51