主要内容

任务执行

这个例子展示了如何模拟任务执行以及如何生成代码和一个SoC硬件板上运行它。

应用程序开发通常包括模拟算法,以确保正确的行为。这种模拟通常忽略了实时嵌入式系统环境的各个方面。这可能让某些时机问题仍未被发现的,直到应用程序运行在硬件。

时机的问题往往会导致不正确的应用程序行为。SoC Blockset帮助你发现这些问题在模拟,而不是硬件。这可以帮助你避免昂贵的硬件调试。

时机的问题更有可能发生在应用程序变得越来越复杂。例如,超支和不受欢迎的速度抢占更频繁的应用程序中有多个任务由于资源约束和任务依赖关系。模拟多任务应用程序与SoC Blockset早期检测这些问题将帮助你。

在这个例子中,使用SoC Blockset任务执行模拟。您将学习不同的技术对模拟任务持续时间以及何时使用它们。您还将学习如何在硬件验证时间规范。

金宝app支持硬件平台:

  • Xilinx®Zynq®ZC706评估工具

  • Xilinx Zynq UltraScale™+ MPSoC ZCU102评估工具

  • ZedBoard™zynq - 7000开发板

  • 阿尔特拉®气旋®V SoC开发工具包

  • 阿尔特拉Arria®10 SoC开发工具包

在这个例子中使用的模型集Xilinx Zynq ZC706评估工具。使用不同的硬件,硬件的选择一个董事会中列出硬件板系统芯片选项卡。做相同的模型和参考模型。

介绍

SoC Blockset模拟软件的执行任务,他们将执行一个SoC处理器。模拟荣誉任务的参数,如时间、优先级和处理器核心。SoC Blockset模拟任务抢占、任务超支,并发任务执行。

下面的图表说明了上述任务执行模拟方面。在前两个次要情节,你可以观察到Task1执行每0.1 s,因为他们都核心0,Task1抢占Task2执行每0.2 s。在第三次要情节,你可以观察到核心0仍有一些空闲时间。最后两个次要情节展示Task3核心1上运行每0.3 s。

了解更多关于模拟任务执行,明白了任务执行是什么?

任务管理器块允许您配置模型中执行任务。在块对话框中,您定义你需要多少任务系统中使用添加删除按钮。在主要选项卡的对话框中,设置主要任务属性,而上模拟选项卡设置仿真任务属性。

下面的图展示了主要选项卡的任务管理器块。

一个任务有一个名称,以便它可以被识别的模型和相关的各种情节。端口上的标签任务管理器块使用的任务名称,便于识别。

一个任务可以两种类型。事件驱动任务执行时触发一个事件。从一个IO事件线连接到数据源块任务管理器块触发任务。一个定时器驱动型可任务执行周期中定义的定义主要选项卡的任务管理器

你定义的事件驱动任务的优先级主要选项卡的任务管理器。定时器驱动型可自动分配任务优先级。

任务管理器对话框还可以设置处理器核心上执行一个任务,如果你的硬件板有多个核心,您可以设定任务的并发执行。

任务管理器块还允许您配置任务超支是如何处理的。例如,您可能会决定放弃任务如果前面的任务实例的实例并没有启动或完成。或者,你可能会决定试着赶上任务安排尽管超支。

模拟实时任务的影响,如抢占和超支、SoC Blockset需要你提供每个任务的持续时间。时间被定义为任务之间的时间开始和结束的任务。理想情况下,你将会在你的硬件测量任务持续时间。如果这是不可能的,查找任务持续时间算法开发人员提供的数据表任务。作为最后的手段,你应该设置持续时间相对于任务周期或非周期任务的最短的重现期。

SoC Blockset设置任务持续时间有几个选择。任务持续时间仅适用于模拟,这些选择中发现的模拟选项卡的任务管理器对话框。

下面的图展示了模拟选项卡的任务管理器对话框。

最常用的选项是:

  • 对话框——允许您指定任务持续时间通过正态分布,或多个正态分布的组合,使用平均值和标准偏差参数。

  • 输入端口——允许您指定任务实例的基础上持续时间。例如,您可以创建一个模型,计算任务的持续时间和连接它任务管理器输入端口。

下面的流程图将引导您选择最合适的选项。

如果你的任务的持续时间有不同的分布和原因,选择最合适的选项使用流程图作为一般指引。

您可以配置额外的模拟和执行参数SoC Blockset模型中配置对话框。任务分析,在模拟和处理器,允许您配置任务执行、结果数据流检查员并将它们保存到一个文件中。

你也可以设置内核延迟值影响任务执行模拟。这个值变化很多,但通常远小于任务持续时间。因此,我们建议你把值设置为0,除非你能确定为您的硬件板找到适当的值。

下图显示了SoC参数相关任务执行模型中配置参数对话框。请注意,任务分析处理器面板显示只有当你安装所有必需的产品和硬件支持包。下载188bet金宝搏金宝app

剩下的步骤的这个例子将说明的一些选项上面的流程图所示。

模拟一个算法与单一的代码路径

这种情况下需要模拟一个DSP算法处理一帧的数据。以下产品需要:

  • DSP系统工具箱

如果你没有这个产品,继续下一个案件审查后这种情况的描述。

在本例中,您将学习如何建模任务持续时间时,算法具有一个单一的代码路径。

假设您的任务是开发一个应用程序进程RF(射频)数据在一个SoC。预处理后的FPGA核心,数据流处理器核心使用AXI4协议。算法运行在处理器内核应该确定数据是否包含高频或低频信号。为此,一个低通和高通滤波器应用于数据。由此产生的信号然后比较选定的阈值。在此基础上描述,这个任务只有一个代码路径,没有主要的代码分支。任务函数的源代码可能有以下形式。

双dataReadTask (double[]){/ *帧大小总是1000 * / int signalType;/ * 0 - LP, 1 -惠普* /双着干活[1000],out2 [1000];着干活,filterLP (1000);out2, filterHP (1000);signalType =阈值(out2着干活,1000);}

1。打开模型。注意测试数据子系统。的射频数据源子系统中的块代表外部内存和FPGA核心。的射频数据源块有两个输出端口,流数据事件。他们输出射频数据和通知当新的数据帧可用,分别。

2。请注意,射频数据源1000块生成帧样本每0.01 s。的框架样品1 kHz正弦波形。

3所示。单击任务管理器块。观察,它集事件驱动任务dataReadTask。任务由一个新的数据帧的到来。

4所示。单击模拟选项卡中任务管理器对话框定义为仿真任务持续时间。

由于算法包括两个过滤器执行没有条件,应用程序只有一个代码路径。因此,你遵循的第一左支流程图所示算法执行时间的介绍和你希望有一个正态分布。

基于给定的信息算法开发人员,您确定的平均执行时间是0.0095,标准差为0.0001 s。代表实时的限制,你也决定设置最小和最大执行时间为0.00925和0.00975年代,分别。

设置时间参数任务管理器对话框的模拟选项卡如上所述。

5。在模型中,单击运行开始仿真。等到模拟完成。

6。从模型工具栏,打开数据检查、检查dataReadTask。放大检查任务的执行时间。

7所示。运行以下命令来执行任务执行时间的统计分析。观察数据检查运行数据。修改命令如果你运行的数字是不同的。

socTaskTimes (“soc_task_execution”、“运行1:soc_task_execution”)

观察到任务的持续时间不同。正如所料,任务持续时间的柱状图表明,该算法有一个代码路径。集群持续时间值的平均值0.0095 s。

8。关闭模式,没有做任何修改。

模拟的算法有两个代码路径

在本例中,您将学习如何模型任务持续时间当任务算法有两个代码路径和可预测的路径将。

假设您正在开发一个视频监控应用程序。任务是不断过程视频数据来确定是否有入侵的系统。场景变化的算法计算量之间的连续视频数据帧。如果场景变化超过所选阈值,等帧记录他们可能作为潜在的入侵的证据。因此,这个算法有两个代码路径。这个算法的源代码可能是代表在以下形式。

空白VideoTask(单[]、长度、双阈值){双能量;能量= calcSceneChange(长度);如果(能量>阈值)recordFrame(,长度);}}

1。打开模型。注意数据源块输出帧的视频数据。

2。点击模型块,观察算法计算连续帧之间的运动能量的数据。如果计算出的运动能量超过阈值,主要算法是执行。

3所示。单击任务管理器块。观察,它设置一个定时器驱动型可任务VideoTask。此任务每0.33333秒,视频帧率。

4所示。单击模拟选项卡任务管理器对话框定义为仿真任务持续时间。

自从算法有两个代码路径,它可以预测哪些代码路径将遵循第二左支流程图。

模型的任务持续时间取决于运动的能量。取决于运动的能量超过阈值,您将指定任务持续时间平均为75%或50%的帧速率,分别。

单击任务持续时间估算子系统来理解如何建模任务持续时间。

5。在模型中,单击运行开始仿真。等到模拟完成。

6。从模型工具栏,打开数据检查并检查VideoTask。放大检查任务的执行时间。

7所示。运行以下命令来执行任务执行时间的统计分析。观察数据检查运行数据。修改命令如果你运行的数字是不同的。

socTaskTimes (“soc_task_execution_step2”、“运行2:soc_task_execution_step2”)

观察到任务的持续时间不同。正如所料,任务持续时间的柱状图表明,该算法有两个代码路径。

8。关闭模式,没有做任何修改。

模拟一个算法与不定数量的代码路径

在本例中,您将学习如何模型任务持续时间当任务算法有一个不定数量的代码路径,但是代码路径给定的数据集是可重复的。

在这种情况下,假设您正在开发一个复杂的应用程序处理的数据在一个SoC。由于处理的复杂度,算法有一个不定数量的代码路径。结果,不可能预测哪些代码路径将。然而,众所周知,任务持续时间的分布在多个实验是可重复的。这种算法的源代码可能有以下形式。

int myTask (arr int [], int长度){int i = 0;int和= 0;虽然(我<长度){如果(arr[我]> 0)和=和+ arr[我]我+ +;}}

1。打开模型

2。单击任务管理器块,选择任务myTask。单击模拟选项卡。观察我们的概率分布定义为两个正态分布的组合。

3所示。点击运行开始仿真。任务执行的数据将流数据检查

4所示。运行以下命令来执行任务执行时间的统计分析获得的模拟。观察数据检查运行数。如果你运行修改命令数量是不同的。

socTaskTimes (“soc_task_execution_step3”、“运行3:soc_task_execution_step3”)

注意到任务持续时间分布在模拟比赛中获得预期的结果。

5。这个模型没有做任何修改。

模拟应用程序使用代理任务

假设您正在开发一个复杂的应用程序,将一个任务添加到模型在前面的情况。目前没有这个任务的实现,但这个任务的时间规范。任务执行每0.02年代期间用正态分布描述。分布的均值0.008,标准差0.0009年代。

1。打开模型

2。单击任务管理器块,选择任务proxyTask。单击模拟选项卡。我们观察到定义的概率分布为正态分布的参数在介绍中提到的这个任务。

3所示。在模型块打开代理任务块和检查样本时间价值。样品时间值必须匹配周期值中输入的任务管理器。单击取消。

4所示。点击运行开始仿真。任务执行的数据将流数据检查

5。运行以下命令来执行任务执行时间的统计分析获得的模拟。观察数据检查运行数。如果你运行修改命令数量是不同的。

socTaskTimes (“soc_task_execution_step4”、“运行4:soc_task_execution_step4”)

注意,获得任务的持续时间在模拟应用程序和代理任务。

6。这个模型没有做任何修改。

比较仿真结果和硬件上的结果

在本节中,您将比较结果时机在前面的模拟硬件板上获得的计时结果。

所需产品:下载188bet金宝搏

  • 嵌入式编码器

  • SoC Blockset 金宝appXilinx设备支持包,或

  • SoC Blockset为金宝app英特尔设备支持包

1。系统芯片选项卡上,单击配置、构建和部署

2。遵循SoC Builder工作流,直到你到达选择构建操作屏幕上。

3所示。选择为外部模式构建和负载并继续,直到你完成工作流程。

4所示。点击监视和优化将模式部署到硬件。模型已经将概要任务执行,因为它运行在硬件和流的分析数据数据检查在实时。

5。运行以下命令来执行任务执行时间的统计分析获得硬件。观察数据检查运行数。如果你运行修改命令数量是不同的。

socTaskTimes (“soc_task_execution_step4”、“运行5:soc_task_execution_step4”)

注意,获得任务的持续时间在仿真硬件匹配结果。

6。这个模型没有做任何修改。

总结

这个例子向您展示了如何模拟任务执行在一个多任务操作系统中,如何生成代码和硬件板上运行它,以及如何收集实时任务执行数据。

在这个例子中,我们使用简单的应用程序,每一个任务。然而,在一个典型的应用程序必须执行多个任务。嵌入式应用程序必须运行每定义每个任务调度。允许使用处理器最有效和快速反应外部事件,基于优先级的抢占式调度算法。

基于优先级的抢占式调度,当一个任务被抢占,任务切换。使用的数据任务(任务上下文)保存,以便它可以恢复当任务继续执行。在这个例子中,任务切换时间相形见绌的任务持续时间和模拟。在应用程序与任务持续时间要短得多,您可能需要考虑它们。

如果一个硬件板有多个处理器核心,嵌入式应用程序通常会尝试使用所有核为最有效的实现。SoC Blockset使用基于优先级的抢占式调度算法即使处理器有多个核心。SoC Blockset荣誉任务的任务/核心模拟和生成的代码。

接下来,我们建议完成流数据从硬件到软件示例,演示了一个系统性的方法来设计一个复杂的使用SoC Blockset SoC应用程序。