c - 如何在 C S-Function 之间共享 C 结构?

标签 c simulink

有没有办法在多个 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/

相关文章:

c - 如何使用scanf读取文件中的每个单词。

c - 是否需要在生产者和消费者文件中调用 shmat 和 shmget ?

c - 锚定一个新的 Lua 线程

matlab - 如何更改 'linearize' 的 Matlab 源工作区?

code-generation - Simulink 中的循环缓冲区

matlab - 如何修复 Simulink SLX 文件?

c - 为什么 fprintf() 不写入文件?

c - 使用 C 在 Linux 中获取用户组的正确方法

matlab - 如何在不重启 MATLAB 的情况下重新编译模型 DLL?

matlab - 如何将 Simulink 模块的输出作为输入反馈?