主要内容

速率转换和异步块

由于异步函数调用子系统可以抢占或被其他模型代码抢占,当多个信号元素连接到异步块时,就会出现不一致。问题是,当发生抢占时,传递给函数调用子系统的信号可能处于写入或读取的过程中。因此,使用了一些旧数据和一些新数据。在某些情况下,标量信号也会出现这种情况。例如,如果一个信号是双字节(8字节),那么读或写操作可能需要两条机器指令。

请注意

本节中演示的操作系统集成技术使用中断模板块库中的块。该库中的块提供了起点示例,以帮助您为目标环境开发自定义块。

关于速率转换和异步块

的仿真软万博1manbetx件®速率转换块用于处理以不同速率运行的块之间的数据传输中出现的抢占问题。这些问题在基于时间的调度和代码生成

您可以通过选择模型配置参数自动处理速率转换问题自动处理速率转换的数据传输.这节省了您必须手动插入速率转换块以避免无效的速率转换,包括无效的asynchronous-to-periodicasynchronous-to-asynchronous速率转换,在多速率模型中。对于异步任务,Simulink引擎为数据传输期间的数据完万博1manbetx整性而不是确定性配置插入块。

对于异步速率转换,速率转换块提供数据完整性,但不能提供确定性。因此,当显式插入速率转换块时,必须清除块参数确保确定的数据传输(最大延迟)

当你插入一个率两个街区之间的过渡块来维护数据完整性和优先级分配给相关的任务块,代码生成器假设更高优先级的任务可以抢占低优先级任务和低优先级任务不能抢占更高优先级的任务。如果没有为任何一个块分配与任务关联的优先级,或者两个块的任务的优先级相同,则代码生成器假定任何一个任务都可以抢占另一个任务。

周期任务的优先级由Simulink引擎根据万博1manbetx解算器的选择部分的解算器对话框中的。当周期性样本时间约束参数设置为无约束,则设置模型基本速率优先级为40.子程序的优先级,然后递增或递减1从基本速率优先级,取决于参数的设置优先级值越高,任务优先级越高

您可以使用参数手动分配优先级周期样本时间性质.Simu万博1manbetxlink引擎不会为异步块分配优先级。例如,连接回的函数调用子系统的优先级异步中断块由异步中断块。

块参数万博1manbetx仿真软件任务优先级异步中断Block指定为参数输入的每个中断号的优先级(必需的)VME中断编号.优先级数组设置连接到每个中断的子系统的优先级。

任务同步块,如果示例为RTOS (VxWorks . block)®)为目标,清除块参数优先级值越高,任务优先级越高.参数万博1manbetx仿真软件任务优先级指定相对于连接块的块优先级(除了为生成的任务代码分配一个RTOS优先级)。

vxlib1库提供了两种类型的速率转换块作为方便。这些是内置Simulink Rate Transition块的简单预配置实例:万博1manbetx

  • Protected Rate Transition block:带块参数的速率转换块确保数据传输过程中的数据完整性选择和确保数据传输的确定性清除。

  • 无保护速率转换块:配置了速率转换块确保数据传输过程中的数据完整性清除。

处理异步任务的速率转换

对于涉及异步任务的速率转换,您可以维护数据完整性。然而,你无法实现决定论。您可以选择使用速率转换块或特定于目标的速率转换块。

考虑下面的模型,它包含一个速率转换块。

您可以在以下两种模式中使用速率转换块:

  • 保持数据完整性,不确定性

  • 无保护的

或者,您可以使用特定于目标的速率转换块。以下块可用于示例RTOS (VxWorks):

  • 转换块(读取器)

  • 转换块(写入器)

  • 无保护速率转换块

处理多个异步中断

考虑以下模型,其中两个函数触发相同的子系统。

这两项任务必须同等优先。当优先级相同时,结果取决于它们是周期性触发还是异步触发,也取决于诊断设置。下表和注释说明了这些结果:

万博1manbetx支持多触发器函数调用子系统的采样时间和优先级

异步优先级= 1

异步优先级= 2

异步优先未指明的

周期优先级= 1

周期优先级= 2

异步优先级= 1

万博1manbetx支持(1)

异步优先级= 2

万博1manbetx支持(1)

异步优先未指明的

万博1manbetx支持(2)

周期优先级= 1

万博1manbetx支持

周期优先级= 2

万博1manbetx支持

  1. 通过模型配置参数控制这些结果同等优先级的任务;将此诊断设置为没有一个如果相同优先级的任务不能在目标系统中抢占。

  2. 对于这种情况,将无条件地发出以下警告消息:

    函数调用子系统有多个不指定优先级的异步触发器。如果这些触发器可以相互抢占,数据完整性将无法维护。

上表中的空单元格表示多个具有不同优先级的触发器,这些触发器不受支持。万博1manbetx

代码生成器为连接多个中断的函数调用子系统提供了绝对时间管理,在这种情况下,计时器设置为TriggerATriggerB(时间来源,分辨率)是相同的。

假设上述模型满足以下条件:

  • 函数调用子系统由具有相同优先级设置的两个异步触发器(TriggerA和TriggerB)触发。

  • 每个触发器通过调用函数来设置时间源和计时器属性ssSetTimeSourcessSetAsyncTimerAttributes

  • 被触发的子系统包含一个需要经过或绝对时间的块(例如,离散时间积分器)。

异步函数调用子系统有一个全局变量,clockTick #(是与子系统关联的任务ID)。这个变量存储异步任务的绝对时间。有两种方法可以处理时间:

  • 如果时间源为SS_TIMESOURCE_BASERATE,代码生成器在函数调用子系统中生成计时器代码,从基本速率时钟滴答更新时钟滴答变量。如果将相同的优先级分配给TriggerA和TriggerB,则可以保持数据完整性。

  • 如果时间源为SS_TIMESOURCE_SELF,为TriggerA和TriggerB生成的代码从硬件时钟更新相同的时钟滴答变量。

时钟滴答变量的字长可以直接设置,也可以根据模型配置参数的设置来建立应用程序生命周期(天)以及TriggerA和TriggerB S-functions设置的定时器分辨率(必须相同)。看到异步任务中的计时器控制时间计数器的内存分配为更多的信息。

保护数据完整性挥发性关键字

当您选择块参数时数据传输过程中必须保证数据的完整性,生成的代码率转换块定义挥发性全局缓冲区和信号量,并使用它们来保护传输数据的完整性。用于附加保护,或用于无率转换块,则可以显式应用挥发性传输的数据。有关更多信息,请参见使用const和volatile类型限定符保护全局数据(嵌入式编码)

相关的话题