有没有办法在多个 C S-Function 之间共享一个 C 结构(仅实例化一次)?这就是我的意思:我有一个 Simulink 模型,其中包含许多作为 C S-Function 实现的 block 。这些 block 中需要许多模型参数,我想创建一个包含所有模型参数的对象,并且在我开始模拟时只实例化一次。现在我为每个 S-Function 实例化这个对象以访问参数,但最好在 S-Function 之间共享这个对象。
只是一个纯粹的猜测:我可以将我的模型参数结构放在一个单独的 DLL 中,然后从每个 C S-Function 访问它吗?你们以前有人做过吗?
最佳答案
我已经成功地实现并测试了 DLL 的想法(即将所有模型参数收集在 DLL 中的结构中 - 加上任何必要的计算 - 并将其链接到其他 C S-函数)。 Simulink 是一个单一的进程,我相信模拟是一个单一的线程(如果不是的话,有办法让它成为线程安全的)。
具有来自 DLL 的模型参数的结构充当单例(每次模拟仅实例化一次并在其他 S-Function 之间共享)。
更新(部分来自mathworks的回复):
Simulink 的仿真部分始终是单线程的。因此,共享 DLL 不存在线程安全问题。
不同 S-Function block 的全局变量将共享相同的内存位置。这意味着将为所有 Simulink 加载共享库的单个实例。因此,加载共享库的所有 S-Function 实例都将引用相同的共享库和数据。
或者,您也可以考虑使用数据存储 block 来实现全局变量。这将需要从每个 S-Function 到适当的数据存储 block 的信号连接。但是不需要 S-Function 之间的连接。
关于c - 如何在 C S-Function 之间共享 C 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17966799/