主要内容

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

采样时间考虑事项

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

任务模式

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

请注意

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

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

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

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

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

比较使用中断服务例程(没有操作系统的裸机)和使用实时操作系统原语的程序执行

模型执行和速率转换

为了生成按预期实时执行的代码,您(或Simulink引擎)可能需要在模型中识别和处理示例速率转换。金宝app在多任务模式下,默认情况下,如果模型包含无效的速率转换,Simulink引金宝app擎将在模拟期间标记错误。您可以使用模型配置参数多任务数据传输来改变这种行为。参数单任务数据传输可用于同一目的的单任务模式。

要避免引起速率转移错误,请在任务之间插入速率转移块。您可以通过插入隐藏的速率转换块,请求Simulin金宝appk引擎自动处理速率转换。看到自动速率转换有关此选项的解释。

要理解这些问题,首先要考虑Simulink模拟与实时程序的不同之处。金宝app

执行期间金宝app模型仿真

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

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

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

模型实时执行

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

考虑下面的时序图。

显示样本间隔内处理效率低下的时序图

注意样本间隔中的处理效率低t1.这个间隔不能被压缩以提高执行速度,因为根据定义,采样时间是实时的。

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

看到多任务和伪多任务模式来了解它是如何工作的。在继续本文之前,理解这一部分是很重要的。

单任务vs多任务操作

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

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

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

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

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

相关的话题