主要内容

基于时间的调度和代码生成

样品时间考虑

金宝app®模型以一个或多个示例时间运行。Simu金宝applink产品在构建多速率系统(即具有多个样本时间的系统)方面提供了相当大的灵活性。然而,同样的灵活性也允许您构建代码生成器无法生成用于在多任务环境中执行的实时代码的模型。要使多速率模型按预期实时运行(即给出正确的答案),有时必须修改模型或指示Simulink引擎为您修改模型。金宝app一般来说,修改包括在具有不相等的样品时间的块之间放置速率过渡块。以下部分讨论在多任务环境中使用多速率模型必须解决的问题。有关样本时间的全面讨论,包括速率转变,请参阅什么是样本时间?子系统中的样本时间系统中的采样时间解决汇率转换,及相关主题。

任务模式

固定步骤模型有两种执行模式:单任务和多任务。这些模式仅适用于固定步长求解器。要选择执行模式,请选择模型配置参数将每一个离散的速率视为一个单独的任务.当选择此参数时,多速率模型将应用多任务执行。清除该参数时,执行单任务执行。

请注意

使用多任务的多速率模型不能引用使用单任务的多速率模型。

在实时系统中,模型的执行可以借助实时操作系统完成,也可以在实时操作系统上完成裸机目标硬件,模型在中断服务例程(ISR)上下文中运行。

事实上,一个系统(如Open Group UNIX®或微软®窗户®多任务并不意味着你的程序可以实时执行。这是因为该程序可能不会在需要时抢占其他进程。

在一个给定时间内只能存在一个进程的操作系统(如PC-DOS)中,中断服务程序(ISR)必须执行保存处理器上下文、执行模型代码、收集数据和恢复处理器上下文的步骤。

其他操作系统,如posix兼容的操作系统,提供自动上下文切换和任务调度。这简化了ISR。在这种情况下,ISR只是启用模型执行任务,而该任务通常是被阻塞的。下一个图表说明了这种差异。

模型执行和速率转换

要生成按预期实时执行的代码,您(或Simulink引擎)可能需要识别并处理模型中的样本速率转换。金宝app在多任务模式中,如果模型包含无效的速率转换,尽管您可以使用模型配置参数,但金宝app默认情况下,Simulink引擎会在模拟期间标记错误多任务速度过渡改变这种行为。参数单任务速率转换用于单一任务模式的相同目的。

为了避免引起速率转换错误,请在任务之间插入速率转换块。您可以请求Simulink引擎通过插入隐藏的速率转金宝app换块来自动处理速率转换。看到自动速度过渡查询此选项的解释。

要理解这些问题,首先要考虑Simulink仿真与实时程序的区别。金宝app

执行期间金宝app模型仿真

在Simulink引擎金宝app模拟模型之前,它会根据块的拓扑依赖性对块进行排序。这包括将虚拟子系统扩展到它们所包含的单个块中,并将整个模型扁平化为单个列表。一旦此步骤完成,将依次执行每个块。

这个过程的关键是块的顺序。一个输出直接依赖于其输入的块(即具有直接馈通的块)在驱动其输入的块执行之前不能执行。

一些块根据前一个时间步长的值或作为块参数指定的初始条件来设置输出。这样一个块的输出由存储在内存中的值决定,该值可以独立于其输入进行更新。在仿真过程中,将对应时间的变量提前进行计算。这将导致计算瞬间发生(即没有计算延迟)。

模型实时执行

实时程序与Simulink仿真的不同之处在于,程序必须实时同步地执行模金宝app型代码。每次计算都会导致一定的计算延迟。这意味着不能缩短或延长样本间隔(就像在Simulink模拟中那样),这会导致更低的执行效率。金宝app

考虑下面的时间图。

注意在样本间隔内的处理效率低下t1.不能压缩该间隔以提高执行速度,因为根据定义,样本时间是实时记录的。

您可以通过使用多任务模式来避免这种潜在的效率低下。多任务模式定义了具有不同优先级的任务,以执行具有不同抽样率的模型代码部分。

看到多任务和伪多任务模式以了解其工作原理。在继续本文之前,理解这一节是很重要的。

单任务与多任务操作

单任务程序需要更长的采样间隔,因为所有的计算必须在每个时钟周期内执行。这可能导致可用CPU时间的低效使用,如上面的图所示。

多任务模式可以提高您的程序的效率,如果模型是大的,并有许多块在每个速度执行。

然而,如果您的模型是由单一速率控制的,并且只有少数块以较慢的速率执行,那么多任务实际上会降低性能。在这样的模型中,任务切换产生的开销可能大于执行较慢的块所需的时间。在这种情况下,以主导速度执行所有块会更有效。

如果您的模型可以从多任务执行中受益,那么您可能需要通过添加Rate Transition块(或指示Simulink引擎这样做)来修改您的模型,以生成预期的结果。金宝app

有关这两种执行模式和示例的更多信息,请参见单任务执行的建模多任务执行建模

相关的话题