0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

电子工程师 来源:网络整理 2018-02-15 05:41 次阅读

在寻求获得来自处理系统内的赛灵思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调度”。随着一个事件驱动的溶液,任务只切换,当一个具有较高优先级的运行必需的。这通常被称为“抢占式调度”。

死锁,资源共享和饥饿

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

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

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

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

一般地,每个资源有分配给它的一个二进制信号。一个请求进程将等待资源执行之前变得可用。一旦任务完成,请求进程将释放资源。这些信号量通常被称为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文件中下面的语句应该纠正这个问题。

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

启动和运行

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RTOS
    +关注

    关注

    20

    文章

    773

    浏览量

    118773
  • 实时操作系统

    关注

    1

    文章

    182

    浏览量

    30492
收藏 人收藏

    评论

    相关推荐

    TC399 adc能添加到同一个队列并得到结果吗?加入队列是否有任何限制?

    添加到队列并得到结果。 我的疑问是,有了这些不同的频道和组,我还能把它们添加到同一个队列并得到结果吗?加入队列是否有任何限制?
    发表于 03-04 06:33

    如何将F-RAM™添加到现有的PSoC™ Creator项目?

    ™Creator 添加 的示例。所有示例似乎都使用了 Modus 工具箱。是否有任何文档显示如何将F-RAM™添加到现有的PSoC™ Creator 项目?
    发表于 03-01 12:14

    FCX3是否具有PTS或SCR添加到映像帧的功能?

    问题 1) FCX3是否具有PTS或SCR添加到映像帧的功能,如随附的USB规范中所述? 如果可能,请提供有关如何配置每个 PTS 和 SCR 的详细信息。 问题 2) CAN FCX3 支持1080x1280@120fps传输带宽? 如果这很困难,请让我知道实际使用
    发表于 02-26 08:23

    如何将TC1798器件添加到MDK KEIL?

    我正在尝试使用 KEIL MDK(µVision)为英飞凌TC1798编程,但我不确定如何将TC1798器件添加到MDK KEIL。 谁能帮我拿到 .pack 或者.zip 对于 TC1798?
    发表于 02-01 08:18

    如何将CMSIS DSP库添加到XMC4700 Relax Kit的Dave CE项目中?

    我刚开始研究 Dave,这对我来说还是个新事物。 我创建了一个 Dave CE 项目,并能够启动并运行 blink 代码。 我想将 CMSIS DSP 库添加到我的项目中,并使用库的 DSP 函数
    发表于 02-01 07:11

    TC397 Infineon-AURIX_STM_Interrupt_1_KIT_TC397例程添加到RTOS不工作的原因?

    使用Infineon-AURIX_STM_Interrupt_1_KIT_TC397 例程添加到RTOS不工作,到达设定的时间不能触发中断,而单独的例程是没有问题的,请问出现此问题是什么原因?是否与
    发表于 01-24 07:42

    安装python怎么添加到环境变量

    Python是一种简单易学的脚本语言,广泛应用于开发各种类型的应用程序。为了在Windows操作系统上使用Python的命令行工具,需要将Python添加到系统的环境变量中。本文将向您详细介绍如何在
    的头像 发表于 11-23 16:40 742次阅读

    西门子博途S7-1200:将模块添加到机架的方法

    在网络视图中将设备从硬件目录添加到组态后,即可向设备中添加模块。
    的头像 发表于 09-04 15:22 3787次阅读
    西门子博途S7-1200:将模块<b class='flag-5'>添加到</b>机架的方法

    如何将溶解氧添加到WiFi水培套件

    电子发烧友网站提供《如何将溶解氧添加到WiFi水培套件.zip》资料免费下载
    发表于 06-14 10:00 0次下载
    <b class='flag-5'>如何将</b>溶解氧<b class='flag-5'>添加到</b>WiFi水培套件

    赛昉科技成功将EDK II支持添加到VisionFive 2中

    近日,赛昉科技成功将EDK II支持添加到VisionFive 2(昉·星光 2)中。VisionFive 2是赛昉科技推出的高性能RISC-V单板计算机(SBC),自发布以来,在生态伙伴、社区开发者及赛昉科技的共同努力下,VisionFive2的软件生态已取得长足的发展。
    的头像 发表于 05-19 15:30 749次阅读
    赛昉科技成功将EDK II支持<b class='flag-5'>添加到</b>VisionFive 2中

    如何将RTSP视频源添加到我的“RainGauge”项目网站?

    RTSP 视频源添加到我的“RainGauge”项目网站: 视频由“Wyse Cam 3”捕获,提供给在 Windows PC 上运行的“虚幻媒体服务器”。HTML5文件内嵌WebRTC
    发表于 05-11 07:41

    如何将check() API公开添加到SPIFFS?

    SPIFFS.remove() 失败。我在 c api 中看到有一个 spiffs_check.c,但我认为它没有暴露在 SPIFFS obj 模型。有点让我头疼,但现在我认为我目前唯一的办法是重新格式化 spiff, check() API 公开
    发表于 05-08 07:00

    包含路径不会添加到项目中的每个源文件怎么解决?

    当在项目设置添加包含路径时,不会将此路径添加到每个源文件,因此需要在文件夹搜索头文件的源文件无法构建。我的项目过去常常正确构建。 我
    发表于 05-05 07:49

    Yocto S32G添加新层,如何添加到图像?

    meta-mylayer 路径添加到 bblayers.conf。 然后我构建 fsl-image-auto,我测试它,关于层的代码不起作用。 我搜索问题,我需要将图层添加到图像。我没有找到 hello.ko
    发表于 04-25 09:59

    如何将DDR4内存添加到imx8mp?

    DDR4 内存添加到 imx8mp
    发表于 04-20 10:59