我有一个simulink模型,我使用simulink编码器为Generic Real-Time目标生成代码。 然后,我将生成的文件(* .c和* .h)复制到MPLAB中的项目中。 这里我有main.c文件,在这里我使用MdlStart()初始化模型一次然后在无限循环中我使用MdlOutputs()和MdlUpdate()来运行模型。一切正常。
现在实际上我想加快模型的执行速度,因此我希望将模型拆分为子系统并仅在需要时执行子系统(例如,我想每次都执行一些子系统,而只是每次执行一些子系统几毫秒而不是每次)。我可以将模型拆分为子系统,并使每个子系统都是原子的,这样我就可以为每个子系统获得不同的功能。现在,从MdlOutputs()和MdlUpdate()调用这些不同的子系统函数。因此,每次执行模型时都会执行。
实际上我想在我的MPLAB项目中使用一些定时器,然后执行几个子系统让我们说每100毫秒。我也不想修改自动生成的* .c和* .h文件。
因此,不是每次通过MdlOutputs()和MdlUpdate()执行这些子系统的功能,是否可以从我的main.c文件调用子系统的函数而不触及自动生成的* .c和*。 h文件?
我希望我已经解释得很好。
等待你的帮助。
答案 0 :(得分:2)
您应该尝试对Simulink内部子系统尝试的所有内容进行建模。例如,您可以使用“启用的子系统”或“触发的子系统”来创建仅在某些时间步骤上运行的子系统。我不确定你指的是什么样的计时器。如果是Simulink时间,那么您需要以不同的采样率运行不同的子系统,这将为您提供多速率模型。如果您的计时器只是另一个外部源,则尝试触发或启用子系统。这是避免修改生成文件的最佳方法。
这些子系统的文档位于http://www.mathworks.com/help/simulink/conditional-subsystems-1.html。