主要内容

速率转换和异步块

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

笔记

本节中演示的操作系统集成技术使用一个或多个块vxlib1.图书馆。这些块提供了起点示例,以帮助您为目标环境开发自定义块。

关于速率转换和异步块

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

您可以通过选择Model ConfiguratOin参数自动处理速率转换问题自动处理数据传输的速率转换.这节省了您必须手动插入速率转换块以避免无效的速率转换,包括无效的asynchronous-to-periodic异步到异步速率转换,在多型模型中。对于异步任务,Simulink引擎配置已插入的块以用于数金宝app据完整性,但在数据传输期间没有确定性。

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

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

周期任务的优先级由Simulink引擎根据金宝app解算器的选择部分解算器配置参数对话框的窗格。当。。。的时候周期性样本时间约束参数设置为无约束,则设置模型基本速率优先级为40..子项的优先事项随后递增或减少1从基本速率优先级,取决于参数的设置更高的优先级值表示更高的任务优先级

您可以使用参数手动分配优先级定期采样时间特性.Simu金宝applink引擎不会将优先级分配给异步块。例如,连接回到的函数调用子系统的优先级异步中断块被分配异步中断堵塞。

块参数金宝appSimulink任务优先级异步中断Block指定为参数输入的每个中断号的优先级(必需的)VME中断号码.优先级阵列将连接到每个中断的子系统的优先级设置。

任务同步块,如果示例RTOS(VxWorks®)为目标,清除块参数更高的优先级值表示更高的任务优先级.范围金宝appSimulink任务优先级指定相对于连接块的块优先级(除了为生成的任务代码分配RTOS优先级)。

vxlib1.图书馆提供两种类型的速率过渡块。这些是简单的内置模拟速率转换块的预先配置实例:金宝app

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

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

处理异步任务的速率转换

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

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

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

  • 保持数据完整性,没有确定性

  • 无保护

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

  • 转换块(读取器)

  • 转换块(写入器)

  • 无保护速率转换块

处理多个异步中断

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

两个任务必须具有相同的优先事项。当优先级相同时,结果取决于它们是否定期射击,也取决于诊断设置。下表和注释描述了这些结果:

金宝app具有多个触发器的函数呼叫子系统的支持采样时间和优先级

异步优先级= 1

异步优先级= 2

异步优先级未指定

定期优先级= 1

定期优先级= 2

异步优先级= 1

金宝app支持(1)

异步优先级= 2

金宝app支持(1)

异步优先级未指定

金宝app支持(2)

定期优先级= 1

金宝app支持

定期优先级= 2

金宝app支持

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

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

    函数调用子系统具有未指定优先级的多个异步触发器。如果这些触发器可以彼此抢占,则不会保持数据完整性。

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

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

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

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

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

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

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

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

  • 如果时间来源是SS_TIMESOURCE_SELF,Triggera和Triggerb的生成代码更新了来自硬件时钟的相同时钟滴答变量。

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

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

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

相关的话题