如何将RTOS添加到ZYNQ SoC设计中

在寻求获得来自处理系统内的赛灵思Zynq?-7000全可编程SoC的最大利益,操作系统将让你更不是一个简单的裸机解决方案。任何开发ZYNQ SoC设计有大量的操作系统可供选择,并根据最终应用程序,你可以选择一个实时版本。一个RTOS是您最好的选择,如果你是在工业,军事,航空航天或在响应时间和可靠的性能要求,以防止生命或伤亡的,或者实现严格的绩效目标等具有挑战性的环境中使用的SoC
ZYNQ。

为了得到一个感觉如何最好地实时操作系统添加到我们的ZYNQ SoC系统中,我们将使用最流行的实时操作系统之一左右,在μC/ OS-III Micrium的。这RTOS或更早的版本中它已经用在了一些非常令人兴奋的系统,包括火星的好奇心流动站。目前最新的版本是在被认证为MISRA-C,DO178B
A级,SIL3 / 4和IEC61508标准,这意味着它应该有一个广泛的吸引力许多ZYNQ SoC的用户的过程。但在此之前进入的实施细则,这是有帮助的审查实时操作系统的基础知识。

什么是实时操作系统?

是什么让一个实时操作系统与标准操作系统有何不同?井,一个实时操作系统是确定性的,这意味着该系统限定的期限内进行响应。这个决定可以是一个重要的原因,例如,如果最终应用正在监控工业过程,并具有以响应事件在指定的时间周期内,如将是一种用于工业控制系统中的情况。

的RTOS进一步细分基于它们来满足这些最后期限的能力。这种分类产生了三种不同类型的RTOS,其中每一个不同的地址的最后期限的概念。在硬的RTOS,缺少一个期限被看作是一个系统故障。这不是为公司RTOS,其中偶尔错过截止时间是可以接受的情况。在软的RTOS,同时,缺少一个期限减少的结果的有效性,但该系统作为一个整体能容忍此。

实时操作系统围绕运行的任务(有时称为工艺),其每一个执行所需功能的概念。例如,一个任务可能读取数据通过接口或对这些数据进行操作。一个简单的系统可以采用只有一个任务,但它更可能为多个任务,以在处理器上在任一时刻运行。这些任务之间的切换被称为“上下文切换”,它要求与每个任务相关联的处理器的状态被存储和添加到任务堆栈中。

确定的方法,其任务是下一个要运行是由内核(管理从软件输入/输出请求,并将它们转换成用于所述中央处理单元的数据处理的指令和在所述处理器的功能元件的RTOS的核心)来控制。任务调度可以是复杂的,特别是如果我们希望避免死锁的状态,其中两个或多个任务锁定彼此出来。的两个基本方法是时间共享和事件驱动的。分时,每个任务获取处理器上的专用时隙。更高优先级的任务可以被分配多个时隙。此时间片是通过常规的中断或定时器控制,并且通常被称为“round-robin调度”。随着一个事件驱动的溶液,任务只切换,当一个具有较高优先级的运行必需的。这通常被称为“抢占式调度”。

死锁,资源共享和饥饿

当两个或多个进程需要使用相同的资源,如UART,ADC或DAC-它有可能为他们的同时请求该资源。在这种情况下,访问需要为了防止争用被控制。这是如何管理是很重要的。如果没有正确的管理,问题,如“死锁”或“饥饿”可能发生,从而导致系统故障。

死锁当一个进程持有一个资源而无法释放它发生,因为它是无法完成的任务。它要求当前正由另一个过程中的另一个的资源。由于该系统将保持在该状态下无限期地,该应用程序被认为是僵持。你可以想像,僵局是一个实时操作系统发现自己在一个糟糕的情况。

发生饥荒时,一个进程无法运行,因为它需要的资源总是分配给另一个进程。

这可能不会令你感到惊讶地听到,已经出现了很多东西写就这些问题,多年来,有很多提出的解决方案,如德克尔的算法,一个经典的修复程序并发编程的互斥问题。最常用的方法来处理这??些情况下是信号量,这通常是两种类型的二进制信号和计数信号量的。

一般地,每个资源有分配给它的一个二进制信号。一个请求进程将等待资源执行之前变得可用。一旦任务完成,请求进程将释放资源。这些信号量通常被称为WAIT和SIGNAL操作。一个进程将等待一个信号量。如果资源是自由的,该过程将被考虑到资源的控制,它会运行,直到完成,此时它会SIGNAL完成。然而,如果当处理等待对信号执行的资源已被占用,则该过程将被挂起,直到资源变得自由。这可以尽快当前正在执行的处理结束发生,但有可能是一个较长的等待,如果这个过程是由较高优先级的一个进程抢占。一类特殊的名为互斥体(从术语“互斥”派生)二进制信号量经常被用来防止优先级反转。

计数信号以同样的方式作为二进制信号量的工作,但它们被使用时,一个特定类型的资源的一个以上的实例是可用的(例如,数据存储)。由于每个资源被分配给一个过程,计数被减小,以显示剩余的可用资源的数量。当计数到达零,有没有更多的可用资源,并且请求进程将被挂起,直到资源之一被释放。

它往往是必要的过程来与彼此通信。有多种方法可以采用,这是最简单的是,如上所述,以使用一个数据存储和信号。更复杂的技术包括消息队列。有了消息队列,当一个进程希望将信息发送到另一个进程,它发布消息队列。当一个进程希望从一个队列中接收消息时,它会挂起队列。因此,消息队列工作就像一个FIFO(先入先出)存储器。

在μC/ OS-III操作系统

Micrium的μC/ OS-III是一个抢占式RTOS,这意味着它会一直运行具有最高优先级的准备执行任务。在将其加入ZYNQ SoC系统设计的第一步是从Micrium的网站下载了μC/
OS-III的RTOS。一旦你这样做,安装非常简单。你只需要你安装的Xilinx提取下您的计算机上的几个ZIP文件到正确的文件夹(目录)。

请确保您提取名为Zynq-7000-ucosiii-bsp.zip ZIP文件到您的\ ISE_DS \ EDK \软件\ lib目录\ BSP \文件夹中。你会看到一些其他的操作系统这个文件夹下,包括独立和xilkernel的。接下来,提取名为Zynq-7000-ucosiii-demo.zip
ZIP文件到您的\ ISE_DS \ EDK \软件\ lib目录\ sw_apps \文件夹,如图1。再次,你会看到一些其他的应用演示中此文件夹。

图1:显示演示文件的位置的目录结构

无需安装这两套文件,我们准备开始软件开发工具包(SDK)中创建我们的项目。我们将使用之前创建相同的基本硬件,但我们需要一个新的应用程序和板级支持包(BSP),因为我们希望包括操作系统。

在SDK中,关闭所有打开的项目,除了基本硬件设计。接下来,选择文件>新建>应用程序项目的选择,给新的项目名称并选择操作系统μC/ OS-III(见图2)。然后选择μC/
OS-III的演示应用程序(见图3)

图2:选择操作系统

图3:选择μCOS-III演示

当你快乐时,单击Finish按钮。应用程序和板级支持包(如果你选择该选项)将在SDK中创建。如果您选择了自动生成选项,你可能会发现一些错误的报道。这是因为不是所有的项目引用是正确的呢。要设置这些项目引用,您需要导入的演示设置,你会发现项目>来源>设置选项下。在这个XML文件右键单击并查看属性。这将允许您选择和复制该文件的位置,如图4所示。

图4:获取正确的设置

一旦你复制这个位置,在项目右键单击并选择属性。在标题C / C ++一般,选择路径和符号的选择。然后选择导入设置和设置文件的位置粘贴。

同样重要的是,以确保存储库正确指向前面添加的库。您可以通过设置赛灵思工具>存储库,它应该显示在您的μC/ OS-III BSP以前安装的位置检查这些。

因为我们希望使用的UART输出的状态演示,正在显示出完成初始化和运行任务,则可能需要设置标准输入和标准输出到UART下的BSP设置。

经执行这些操作,你会看到,现在可以建项目。但是,仍然会有一些警告,如果你想在你的硬件上运行这个项目,将无法达到演示指出它应该。这是因为警告了未申报的功能。包括bsp.c文件中下面的语句应该纠正这个问题。

??? 的#include“xil_cache.h”

有一次,我添加了这个“有”头文件,该项目建成并运行按预期在我的ZedBoard(见我的YouTube视频)。

启动和运行

在拿到例如启动和运行,你现在有信心,RTOS已经在系统上正确实施。现在,您可以继续正确地执行对ZYNQ SoC的软件设计。一旦你创建了软件应用和工程团队已经准备好尝试一下硬件,可以在完全相同的方式创建一个编程文件,你会为裸机系统(参见Xcell杂志问题83,“如何配置您的SoC
ZYNQ裸机解决方案“
),能够与RTOS的应用程序启动和配置存储器执行。

时间: 2024-10-11 05:01:05

如何将RTOS添加到ZYNQ SoC设计中的相关文章

利用ZYNQ SOC快速打开算法验证通路(3)——PS端DMA缓存数据到PS端DDR

上篇该系列博文中讲述W5500接收到上位机传输的数据,此后需要将数据缓存起来.当数据量较大或者其他数据带宽较高的情况下,片上缓存(OCM)已无法满足需求,这时需要将大量数据保存在外挂的DDR SDRAM中. 最简单的方式是使用Xilinx的读写地址库函数Xil_In32()和Xil_Out32(),当然不仅支持32bit位宽,还包括8 16和64bit.但这种方式每次读写都要占用CPU,无法在读写的同时接收后续数据或者对之前的数据进一步处理,也就无法形成类似FPGA逻辑设计中的"流水线结构&qu

利用Zynq Soc创建一个嵌入式工程

英文题目:Using the Zynq SoC Processing System,参考自ADI的ug1165文档. 利用Zynq Soc创建一个嵌入式工程,该工程总体上包括五个步骤: 步骤一.新建空白工程 步骤二.创建一个Embedded Processor工程 步骤三.Zynq7 Processing System的管理 步骤四.综合仿真.编译运行.生成二进制文件 步骤五.Exporting Hardware to SDK 步骤一.新建工程 1. 点击Vivado图标启动软件,Create

基于ARM的SoC设计入门[转]

原文:基于ARM的SoC设计入门 我们跳过所有对ARM介绍性的描述,直接进入工程师们最关心的问题.要设计一个基于ARM的SoC,我们首先要了解一个基于ARM的SoC的结构.图1是一个典型的SoC的结构: 图1从图1我们可以了解这个的SoC的基本构成: ARM core:ARM966E AMBA 总线:AHB+APB 外设IP(Peripheral IPs):VIC(Vector Interrupt Controller), DMA, UART, RTC, SSP, WDT…… Memory bl

利用ZYNQ SOC快速打开算法验证通路(1)——MATLAB浮点数与定点二进制补码互转

最近本人一直在学习ZYNQ SOC的使用,目的是应对科研需要,做出通用的算法验证平台.大概思想是:ZYNQ PS端负责与MATLAB等上位机数据分析与可视化软件交互:既可传输数据,也能通过上位机配置更新硬件算法模块配置寄存器内容,同时可计算分析PL端算法实现性能指标.PL端的FPGA逻辑则负责算法的硬件实现,以探索高效并行硬件架构.为此本人后续会持续编写<利用ZYNQ SOC快速打开算法验证通路>系列专题博文,在各个阶段进行些基础性总结. MATLAB中数据为双精度浮点型,因此打开算法验证通路

实验:添加AXI IP到设计

需要实现的系统是这样的: 1.PL一侧的ASI GPIO只有一位的宽度,用于连接到BTNU按键(在我的zc702上,我选择连接到SW13). 说明:PS和PL里面都有GPIO的模块,添加和配置的方法以及在程序里调用的方法,都是不太相同的. 2.PS部分的GPIO有1位的接口,通过EMIO连接到PL的引脚.并且先接到板上的BTNR按键(zc702上的SW5按键) 说明:上一个开关是在PL部分的管脚进入到PL部分的AXI GPIO模块,在通过PL部分的AXI互联模块,和PS部分的GP AXI主端口进

如何减少无谓的资源消耗?如何在仓库拓扑中进行 SOC 设计?

仓库中的每个存储单元.传输设施以及物品都与特定属性相关.这些属性被称为存储组织标准(Storage Organization Criteria , SOC).这个标准定义了特定存储单元中,可以存储哪些类型的物品,或者特定传输设施可以传送哪些类型的物品.存储组织标准的例子还包括:吞吐量类.有害类以及温度类. 对每一个标准都有特定的.可枚举的允许值,如对吞吐量类来说有快速.中等和低速几种. 仓库管理流程控制系统中的领域功能使用这些信息来决定三个问题: 要存放物品的目标位置是什么? 从当前位置到目标位

数字设计中的时钟与约束

最近做完了synopsys的DC workshop,涉及到时钟的建模/约束,这里就来聊聊数字中的时钟(与建模)吧.主要内容如下所示: ·同步电路与异步电路: ·时钟/时钟树的属性:偏移(skew)与时钟的抖动(jitter).延时(latency).转换(transition)时间: ·内部时钟: ·多路复用时钟: ·门控时钟: ·行波时钟: ·双沿时钟: ·Design Compiler中的时钟约束. 1.同步电路与异步电路 首先来谈谈同步电路与异步电路.那么首先就要知道什么是同步电路.什么是

数据库设计中的Soft Delete模式

最近几天有点忙,所以我们今天来一篇短的,简单地介绍一下数据库设计中的一种模式——Soft Delete. 可以说,该模式毁誉参半,甚至有非常多的人认为该模式是一个Anti-Pattern.因此在本篇文章中,我们不仅仅会对该模式进行介绍,同时也会列出该模式可能导致的一系列问题,以帮助大家正确地决定是否使用该模式. Soft Delete简介 首先先来想一个需求,那就是对用户操作的回滚支持.例如我现在正在用Word编写这篇文章.当我执行了一个错误操作的时候,我仅仅需要键入Ctrl + Z就可以进行回

游戏设计中的道德

最近一直在思考一些关于游戏设计方面的问题.入行已经两年了,以前跟所有刚入行的朋友一样,一直想着怎么从自己设计的游戏中赚钱.怎么让玩家为我的劳动成果买单.当然,我并不是说这样不好,因为只要形成一个良性的循环,优秀的游戏才会持续不断的出现,君不见,几年前国内还是有很多优秀的单机游戏的,但是由于破解的存在,以及中国人在几年前还有着"我都花钱买了电脑了,难道软件还要钱吗?更别提游戏了."这些众所周知的原因,现在中国的市场上已经很难看到新的优秀单机游戏的出现了,还好手游平台拓宽了国内的游戏市场,