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
    +关注

    关注

    25

    文章

    862

    浏览量

    122609
  • 实时操作系统

    关注

    1

    文章

    206

    浏览量

    31799
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何在e203 SOC添加自定义外设

    外设的基地址和连接e203_soc_top信号使用,并将自定义的外设正确实例化在此对外接口口模块。 3、在e203_soc_top中正确实例化第2步的对外接口模块 4、在syst
    发表于 10-20 10:38

    rt_printf相关组件怎么添加

    查询到printf相关两个组件,点击添加时提示如图,请教如何添加到项目中。
    发表于 10-09 07:24

    如何将“同步scons 配置至项目”功能添加到编译步骤

    我想将rt-thread studio的“同步scons配置至项目”功能添加到编译前步骤 但是我不知道这个功能执行了什么指令,在构建前步骤应该输入什么指令,用”scons”命令无法实现
    发表于 09-22 07:39

    如何移除意外添加到项目中或不再需要的板级标注

    在原理图文档调用 Board Level Annotation Command 时,项目目录中会创建一个特殊文件,文件名包含项目名称及 .ANNOTATION 扩展名。此文件一旦创建,会影响标识符的显示和处理方式。目前无法通过自动化方式移除该文件,本文向您展示如何手动
    的头像 发表于 08-25 11:11 953次阅读

    VScode使用STM32CUBE CLT如何添加静态库.a文件到工程

    我使用VScode搭配ST的插件基于Cmake来编译和调试程序,我感觉非常方便。但是遇到一个问题,我不知道如何把.a后缀的静态库文件添加到工程。有没有大佬可以帮忙解决一下。
    发表于 08-12 07:36

    在树莓派5上,如何使用毫米波雷达检测和追踪人类?

    在本指南中,我们学习如何将RD-03D雷达传感器添加到树莓派单板计算机上,以便实时检测和追踪人类。我们将了解该传感器的工作原理及可获取的数据、如何将其连接到树莓派并读取数据,还会用它
    的头像 发表于 07-24 15:32 1955次阅读
    在树莓派5上,如何使用毫米波雷达检测和追踪人类?

    ArkUI-X添加到现有Android项目中

    aar包 在应用工程初始化ArkUI-X 通过Android studio 创建一个应用工程,将我们上述的aar包添加到工程目录下的libs目录 Application部分 继承调用
    发表于 06-04 22:35

    ArkUI-X添加到现有Android项目中

    aar包 在应用工程初始化ArkUI-X 通过Android studio 创建一个应用工程,将我们上述的aar包添加到工程目录下的libs目录 Application部分 继承调用
    发表于 05-28 22:44

    ESP32驱动MFRC522 RFID模块读写IC卡数据

    本文介绍ESP32开发板驱动MFRC522 RFID模块,读取RFID卡原始数据、获取RFID卡的UID,并将个人数据添加到RFID卡
    的头像 发表于 05-28 15:52 696次阅读
    ESP32驱动MFRC522 RFID模块读写IC卡数据

    如何将VCP功能添加到UVC应用程序代码

    我正在尝试 VCP 功能添加到 UVC 应用程序代码。 我的平台是CYUSB3011-BZXC UsbUart 示例代码已添加到现有的 UVC 应用程序
    发表于 05-16 06:41

    如何将ENWF9408AVEF Wi-Fi模块添加到1064EVK wifi_cli SDK项目中?

    如何将 松下 ENWF9408AVEF (NXP 88W8977) Wi-Fi 模块添加到 1064EVK wifi_cli SDK 项目中? 使用不同的 88W8977 定义初始化失败
    发表于 04-02 07:50

    详解Zynq的SPI控制器

    本文简单介绍Zynq的SPI控制器。本文“master”称为“主机”;“slave”称为“从机”;“slave slect”从机选择
    的头像 发表于 03-31 10:35 1422次阅读
    详解<b class='flag-5'>Zynq</b><b class='flag-5'>中</b>的SPI控制器

    如何将项目从IAR迁移到Embedded Studio

    本文描述如何将IAR EWARM项目迁移到SEGGER Embedded Studio(简称SES)
    的头像 发表于 02-25 17:11 1055次阅读
    <b class='flag-5'>如何将</b>项目从IAR迁移到Embedded Studio

    解析PCIe 6.0的正交头内容(OHC)

    在引入 Flit 模式后,TLP Header 的信息进行了重新调整。除基本包头外,还可以正交头内容 (OHC) 添加到 TLP 。OHC 作为 TLP 的额外包头,包含 TLP
    的头像 发表于 02-18 13:55 1464次阅读
    解析PCIe 6.0<b class='flag-5'>中</b>的正交头内容(OHC)

    如何将python文件导入到ROS系统

    本文通过使用myCobot机械臂进行QR码视觉追踪的实践案例分析,介绍如何将 python 文件导入到 ROS 系统
    的头像 发表于 02-11 11:08 1195次阅读
    <b class='flag-5'>如何将</b>python文件导入到ROS系统<b class='flag-5'>中</b>