1

我有一个 simulink 模型,我使用 simulink coder 为通用实时目标生成代码。然后我将生成的文件(*.c 和 *.h)复制到我在 MPLAB 中的项目中。这里我有 main.c 文件,这里我使用 MdlStart() 来初始化模型一次,然后在无限循环中我使用 MdlOutputs() 和 MdlUpdate() 来运行模型。一切正常。

现在实际上我想加快模型的执行速度,因此我想将模型拆分为子系统并仅在需要时执行子系统(例如,我想每次执行一些子系统,而每隔几毫秒执行一些子系统每次)。我可以将模型拆分为子系统,并使每个子系统原子化,以便为每个子系统获得不同的功能。现在这些不同的子系统的函数是从 MdlOutputs() 和 MdlUpdate() 调用的。所以他们每次执行模型时都会执行。

实际上,我想在我的 MPLAB 项目中使用一些计时器,然后每隔 100 毫秒执行几个子系统。我也不想修改自动生成的 *.c 和 *.h 文件。

因此,不是每次都通过 MdlOutputs() 和 MdlUpdate() 执行这些子系统的功能,是否可以从我的 main.c 文件调用子系统的功能而不接触自动生成的 *.c 和 *.h 文件?

我希望我已经解释清楚了。

等待您的帮助。

4

1 回答 1

2

您应该尝试使用 Simulink 中的子系统对您尝试执行的所有操作进行建模。例如,您可以使用“启用的子系统”或“触发的子系统”来创建仅在某些时间步上运行的子系统。我不确定您指的是哪种计时器。如果是 Simulink 时间,那么您将需要以不同的采样率运行不同的子系统,这将为您提供多速率模型。如果您的计时器只是另一个外部源,请尝试触发或启用子系统。这是避免修改生成文件的最佳方法。

这些子系统的文档位于http://www.mathworks.com/help/simulink/conditional-subsystems-1.html

于 2013-10-07T12:57:59.337 回答