主要内容

任务超时和对策

由于系统中可用的处理资源有限,任务的执行实例可能无法在下一个任务实例开始之前完成。此任务溢出将导致任务执行的下一个实例的开始延迟。因此,下一个任务必须迎头赶上,以避免再次溢出。此图显示了两个任务的简化执行:高优先级事件驱动的任务和低优先级计时器驱动的任务。

由于事件驱动任务的执行时间较长,计时器驱动任务的第一个执行实例会超时进入下一个执行实例的开始。此溢出将使第二个执行实例进入追赶模式。

当任务反复过载时,应用程序中可能会出现执行积压,从而可能破坏系统。这些部分讨论了一些典型的对策,它们可以减少任务溢出的机会,也可以处理任务溢出的情况,从而防止执行积压。

增加任务执行间隔

对于计时器驱动的任务,通过为任务提供更多的执行时间来减少超时的机会。通过降低任务速率来增加可用的执行时间,这相当于增加任务执行实例之间的时间间隔。这些额外的时间为每个任务执行实例提供了更好的运行到完成的机会,即使存在其他任务。定时器驱动任务的速率可以在任务管理器块通过设置参数。

不能在所有情况下都保证缩短任务执行间隔。其中一些情况包括:

  • 对于事件驱动的任务,可以同时发生多个事件,这取决于事件驱动任务的优先级。这种情况会导致其他任务由于缺乏资源而超时。

  • 实时需求,即任务、计时器或事件驱动,必须响应最新的事件触发信号和新数据,而不管之前的任务实例是否已完成。本例将任务执行间隔固定为由设计需求确定的值。

在这些情况下,根据设计需求,跨多个处理器核心分布任务或允许删除任务是有利的。

任务在多个处理器核之间的分布

大多数现代嵌入式处理器都提供了多个内核,可以在其中执行任务。通过将任务分布在这些多个处理器核心上,任务可以同时运行,而不必直接竞争处理资源,并减少任务溢出的机会。在SoC Blockset™中,一个任务可以设置为在特定的处理器核心上运行任务管理器块通过设置核心参数设置为核心号。有关多核上任务的选择、执行和可视化的更多信息,请参见多核执行和核心可视化

删除超时的任务

在某些设计中,任务必须在任务触发信号发生时或在系统最新状态时执行。如果已经触发了任务,并且出现了新的任务触发器,则可以删除新实例或删除新实例下降了.在删除溢出任务的执行实例之后,当事件触发信号到达时,将启动下一个执行实例。在发生溢出时删除任务任务管理器块,启用删除溢出的任务参数。

模拟任务掉落

中配置任务的方法任务管理器当模拟过程中发生任务溢出时,将阻塞丢弃。

没有任务掉落的情况下任务溢出

该模型模拟了一个运行在ARM处理器上的软件应用程序。任务管理器块在软件应用程序模型引用块内部调度计时器驱动子系统的执行。随机数块模拟定时器驱动任务采样的数据源。

在该模型中,0.6秒的任务持续时间超过了的任务周期0.5秒导致任务超时。单击Run按钮构建并运行模型。当模型完成运行时,仿真数据检查器将显示任务执行时间。

检查任务的执行时间,可以发现以下每个任务实例的开始时间比预期的延迟0.5-second interval由上一个任务的溢出。即使删除溢出的任务设置为,一个任务的实例不能超过2个。如Timer_Task_drop信号,溢出的附加任务实例将自动删除。

任务掉落导致任务溢出

使用前面所示的相同模型,而不是超越计时器驱动的任务,任务将被丢弃,以便下一个任务实例在0.5秒的时间间隔。打开任务管理器块对话框掩码,并选择删除溢出的任务.再次运行模型。打开仿真数据检查器以查看任务执行和删除的任务实例。

另请参阅

相关的话题