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

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

3天内不再提示

蜂鸟FPGA开发板及蜂鸟JTAG下载器讲解说明:移植FreeRTOS

HOkf_real_farme 来源:lq 2019-01-02 15:06 次阅读

1 RTOS 简述

实时操作系统(RTOS)是指当外界事件或者数据产生时,能够接受并以足够快的速度予以处理,处理的结果又能在规定的时间内来控制生产过程或对处理系统能够做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。主要特点是提供及时响应和考可靠性。

在服务器、个人电脑手机上运行的操作系统,譬如Windows和Linux,强调在一处理器上能运行更多任务。此类操作系统的代码均具有一定规模,并且不一定能保证实时性。而对于处理器硬件资源有限,对实时性又有特殊要求的嵌入式应用领域,就需要一种代码规模适中,实时性好的操作系统。

实时性可以分为硬实时和软实时。硬实时的功能是必须在给定时间内完成操作,如果不能完成将可能导致严重后果。比如汽车安全气囊触发机制就是一个很好的硬实时的例子,在撞击后安全气囊必须在给定时间内弹出,如果响应时间超出给定时间,可能使驾驶员受到严重伤害。

对于软实时,一个典型的实例是IPTV数字电视机顶盒,需要实时的解码视频流,如果丢失了一个或几个视频帧,视频品质也不会相差多少。软实时系统从统计角度来说,一个任务有确定的执行时间,事件在截止时间到来之前也能得到处理,即使违反截止时间也不会带来致命的错误。

2 常用实时操作系统概述

常用的实时操作系统(RTOS)有以下几种:FreeRTOSVxWorks、uc/os-II、uclinuxeCos、RT-Thread和SylixOS等。下面分别对这几种RTOS进行介绍说明。

SylixOS:

— — 翼辉SylixOS实时操作系统是一款功能全面、稳定可靠、易于开发的国产实时系统平台。其解决方案覆盖网络设备、国防安全、工业自动化、轨道交通、电力、医疗、航空航天等诸多领域。SylixOS是国内唯一一款支持SMP的大型实时操作系统。翼辉开发嵌入式操作系统SylixOS始于2006年,至今在军工领域已有众多项目或产品基于SylixOS进行开发,例如雷达、弹载飞控系统、星载任务计算机、机载火控系统、计重收费与超限检测仪、火灾报警系统、特种车辆与船用发动机状态显示器、潜艇蓄电池监控系统、轮式装甲车实时监控系统等,其中大部分产品都要求7*24小时不间断运行,当前很多SylixOS系统节点已不间断运行超过5万小时(6年)。

RT-Thread:

— — RT-Thread是一款主要由中国开源社区主导开发的开源实时操作系统(许可证GPLv2)。实时线程操作系统不仅是一个单一的实时操作系统内核,它也是一个完整的应用系统,包含了实时、嵌入式系统相关的各个组件:TCP/IP协议栈、文件系统、libc接口、图形用户界面等。RT-Thread拥有良好的软件生态,支持市面上所有主流的编译工具如GCC、Keil、IAR等,工具链完善、友好,支持各类标准接口,如POSIX、CMSIS、C++应用环境、Javascript执行环境等,方便开发者移植各类应用程序。商用支持所有主流MCU架构,如ARMCortex-M/R/A、MIPS、X86、Xtensa、Andes、C-Sky、RISC-V,几乎支持市场上所有主流的MCU和Wi-Fi芯片

FreeRTOS:— —有关FreeRTOS见第3章。

VxWorks:

— — 由美国WindRiver公司于1983年推出的一款实时操作系统。由于其良好的持续发展能力,高性能内核以及友好的开发环境,因此在嵌入式系统领域占有一席之地。VxWorks由400多个相对独立、短小精悍的目标模块组成,用户可根据需要进行配置和裁剪,在通信、军事、航天、航空等领域应用广泛。

uc/os-II:

— —前身是uc/os,最早由1992年美国嵌入式专家Jean J.Labrosse在《嵌入式系统编程》杂志上发表,其主要特点有公开源代码,代码结构清晰明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化。

Uclinux:

— — 是由Lineo公司主推的开放源代码的操作系统,主要针对目标处理器没有存储管理单元的嵌入式系统而设计的。Uclinux从Linux2.0/2.4内核派生而来,拥有Linux的绝大部分特性,通常用于内存很少的嵌入式操作系统。其主要特点有体积小、稳定、良好的移植性、优秀的网络功能等。

eCos:

— — 含义为嵌入式可配置操作系统,主要用于消费电子、电信、车载设备、手持设备等低成本和便携式应用。其最显著的特点为可配置性,可以在源码级别实现对系统的配置和裁剪,还可安装第三方组件扩展系统功能。

3 FreeRTOS 简介

由于RTOS需要占用一定系统资源,只有少数RTOS支持在小内存的MCU上运行,FreeRTOS是一款迷你型实时操作系统内核,功能包括:任务管理、时间管理、信号量、消息队列、内存管理等功能,可基本满足较小系统的需要。相对于VxWorks、uc/os-II等商业操作系统,FreeRTOS完全免费,具有源码公开、可移植、可裁剪、任务调度灵活等特点,可以方便地移植到各种MCU上运行,其突出的特性如下。

免费开源。完全可以放心作为商业用途。

文档资源齐全。在FreeRTOS官网上能下载到内核文件及详细的介绍资料

安全性高。SafeRTOS基于FreeRTOS而来,经过安全认证的RTOS,近年来在欧美较为流行,支持抢占式和合作式任务切换模式,代码精简,核心由3个C文件组成,可支持65536个任务。因此其开源免费版本FreeRTOS在安全性方面也应该拥有一定保障。

市场使用率高。从2011年开始,FreeRTOS市场使用率持续高速增长,根据EEtimes杂志市场报告显示,FreeRTOS使用率名列前茅,如图3-1所示,2017年FreeRTOS市场占有率为20%,排名第二。

内核文件简单。内核相关文件仅由3个C文件组成,全部围绕任务调度展开,功能专一,便于理解与学习。

图3-1 2017年各种操作系统的使用数量统计

4 蜂鸟E203移植FreeRTOS

本节介绍如何在HBird-E-SDK环境下移植一个简单的FreeROTS示例。用户可以以此为基础进行丰富和完善,开发更多的复杂示例。

有关HBird-E-SDK环境的快速上手请参见《蜂鸟E203快速上手介绍》,有关HBird-E-SDK系统性的详细介绍请参见中文书籍《RISC-V架构与嵌入式开发入门指南》的第11章。

4.1HBird-E-SDK中FreeRTOS程序代码结构

在HBird-E-SDK环境中,FreeRTOS示例程序的相关代码结构如下所示。

Makefile为主控制脚本,其代码片段如下:

4.2FreeRTOS原理和移植介绍

由于RTOS需要占用一定系统资源,只有少数RTOS支持在小内存的MCU上运行,FreeRTOS是一款迷你型实时操作系统内核,功能包括:任务管理、时间管理、信号量、消息队列、内存管理等功能,可基本满足较小系统的需要。相对于VxWorks、uc/os-II等商业操作系统,FreeRTOS完全免费,具有源码公开、可移植、可裁剪、任务调度灵活等特点、可以方便地移植到各种MCU上运行。

4.2.1RTOS操作系统的基本原理

传统裸机程序是一个大while循环,将所有事情看作一个任务,顺序执行代码,遇到中断发生则响应中断(可能发生中断嵌套),响应完中断后会继续之前被中断的任务,其过程如图4-1所示。

图4-1 裸机程序的过程

而在RTOS中,将所有事情分成各个模块,每一个模块的内容看作一个任务,任务的执行顺序是灵活的,根据相应的调度算法管理任务的运行,灵活性比裸机程序强,其过程如图4-2所示。

图4-2 RTOS程序的过程

FreeRTOS中的调度算法分为时间片调度算法和抢占式调度,在FreeRTOS的FreeRTOSConfig.h文件中配置如下:

即使不配置configUSE_TIME_SLICING为1,FreeRTOS也会默认开启时间片调度。时间片调度算法和抢占式调度的特点简述如下:

时间片调度算法:每一个任务给予固定的执行时间,时间结束后进入调度器,由调度器切换到下一个任务,在默认所有任务优先级相同情况下,轮流执行所有任务。

抢占式调度需要设置任务优先级,在进入调度器后,调度器选择处于就绪态中优先级最高的任务作为下一个执行的任务。高优先级任务可以抢占低优先级任务,发生抢占时需要有能进入调度器的操作,调度器是任务切换的唯一实体。

4.2.2 FreeRTOS源码解析和移植介绍

在HBird-E-SDK环境中,FreeRTOS源代码和蜂鸟E203移植相关的代码结构如下所示。

如上所示,FreeRTOS的代码层次结构分明,用户只需要修改三个文件名为“port*”的源代码,完成基本的中断和异常的底层移植,即可完成对于FreeRTOS的移植。

蜂鸟E203移植FreeRTOS操作系统时,实现固定时间切换任务的操作由内核自带的mtime计时器中断支持,可以设置为每隔一个固定的时间段发生一次计时器中断(称之为System Tick),在中断处理函数中进入调度器切换下一个任务。在port.c文件中mtime计时器设置代码如下:

更多移植代码详情,请用户自行参见三个文件名为“port*”的源代码。

4.2.3任务与中断的关系

FreeRTOS的任务和中断的优先级关系是移植FreeRTOS的难点,需要被正确的理解,否则程序会运行出错:

任务总是可以被中断打断,任务之间具有的优先级,但是与“中断的优先级”没有关系,这两种优先级是相互独立的。

不调用任何FreeRTOSAPI函数的中断,可以设置为任意的“中断优先级”,并且允许嵌套。

在FreeRTOSConfig.h中预先定义configMAX_SYSCALL_INTERRUPT_PRIORITY的值,调用API函数的中断优先级只能设置为不大于该值,支持嵌套,但是会被内核延迟。

关于FreeRTOS的任务优先级和中断优先级如何设置,以及FreeRTOS的更多详细信息,请用户自行查阅相关FreeRTOS手册学习。

4.3运行FreeRTOS

FreeRTOS示例可运行于HBird-E-SDK环境中,使用《蜂鸟E203快速上手介绍》中描述的运行方法按照如下步骤运行:

// 注意:确保在HBIRD-E-SDK中正确的安装了RISC-V GCC工具链,请参见《蜂鸟E203快速上手介绍》了解其详情。

// 步骤一:参照《蜂鸟E203快速上手介绍》中描述的方法,编译FreeRTOS示例程序,使用如下命令:

make software PROGRAM=FreeRTOSv9.0.0NANO_PFLOAT=0

// 步骤二:参照《蜂鸟E203快速上手介绍》中描述的方法,将编译好的FreeRTOS程序下载至FPGA原型开发板中,使用如下命令:

make upload PROGRAM=FreeRTOSv9.0.0

// 步骤三:参照《蜂鸟E203快速上手介绍》中描述的方法,在FPGA原型开发板上运行FreeRTOS程序:

// 由于示例程序将需要通过UART打印结果到主机PC的显示屏上。参考《蜂鸟E203快速上手介绍》所述方法将串口显示电脑屏幕设置好,使得程序的打印信息能够显示在电脑屏幕上。由于步骤二已经将程序烧写进FPGA开发板的Flash之中,因此每次按MCU开发板的RESET按键,则处理器复位开始执行FreeRTOS程序,并将RISC-V字符串打印至主机PC的串口显示终端上。

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

    关注

    1602

    文章

    21309

    浏览量

    593129
  • 操作系统
    +关注

    关注

    37

    文章

    6280

    浏览量

    121870
  • 开发板
    +关注

    关注

    25

    文章

    4426

    浏览量

    93942

原文标题:蜂鸟FPGA开发板全知道篇4:移植FreeRTOS

文章出处:【微信号:real_farmer,微信公众号:硅农亚历山大】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MYMINIEYE Runber蜂鸟开发版免费试用

    `免费试用申请地址:https://bbs.elecfans.com/try_myminieye.html开发板简介1.1 概述RUNBER 开发板是 MYMINIEYE 基于多年在 FPGA 领域
    发表于 07-06 18:13

    【MYMINIEYE Runber蜂鸟开发版免费试用连载】国产FPGA试用评测之MYMINIEYE Runber蜂鸟开发板

    本帖最后由 卿小小_9e6 于 2020-7-30 12:34 编辑 项目名称:国产FPGA试用评测之MYMINIEYE Runber蜂鸟开发板试用计划:1.项目名称《国产FPGA
    发表于 07-16 10:20

    【MYMINIEYE Runber蜂鸟开发版免费试用连载】高云FPGA开箱

    `收到了发烧友寄来的蜂鸟开发板,板子小巧精致比普通名片还要略小,美中不足的一点就是板子没有预留铜柱孔,方便安装铜柱。可以看到板子正面放置了FPGA芯片,数码管,拨码开关,LED和按键等,基本满足了
    发表于 07-26 00:29

    【RSIC-V】Lab1:蜂鸟e203上手教程

    下载到Perf-V,但由于FPGA掉电后刚刚下载的bit文件会丢失,所以开发板一旦掉电后,程序也随之消失,还需要再次下载,为了方便可以继续进
    发表于 08-02 13:47

    【RISC-V】Lab4:基于蜂鸟三色LED灯显示实验

    jtag。User jtag口连接。2、下载蜂鸟e200的ip核到开发板中。如图所示:编译并下载
    发表于 08-10 11:02

    【RISC-V】Lab4:基于蜂鸟三色LED灯显示实验

    jtag。User jtag口连接。2、下载蜂鸟e200的ip核到开发板中。如图所示:编译并下载
    发表于 08-25 14:30

    【RSIC-V】Lab1:蜂鸟e203上手教程

    下载到Perf-V,但由于FPGA掉电后刚刚下载的bit文件会丢失,所以开发板一旦掉电后,程序也随之消失,还需要再次下载,为了方便可以继续进
    发表于 08-25 14:31

    Ubuntu环境下将蜂鸟e203的hello_world例程下载开发板上,遇到JTAG问题求解答

    我想Ubuntu环境下将蜂鸟e203的hello_world例程下载开发板上,之前成功下载过程序,但是最近同样的步骤一直遇到JTAG问题,
    发表于 08-12 07:05

    蜂鸟E203移植ZYNQ7000开发板跑nice例程联合仿真出错怎么解决?

    蜂鸟E203移植到ZYNQ的zedboard开发板,helloworld例程成功。 但是用nice接口例程 生成的.verilog文件联合仿真时,vivado报以下错误。 这些错误对应的verillog代码如下:基本都是断
    发表于 08-12 06:45

    蜂鸟E203移植ZYNQ7000开发板调试打印hellowaord乱码怎么解决?

    移植蜂鸟E203到zynq 保留GPIOA模块,用gpio16和gpio17做串口uart的RX和TX.用Nucleistidio里面模板的helloworld建工程后,下载开发板
    发表于 08-12 07:49

    求助,如何解决J-Link调试蜂鸟E203失败的问题?

    首先讲一下我的操作过程吧。 首先,我下载了开源的蜂鸟E203处理,新建了一个自己的vivado工程,并将rtl目录里的所有.v文件和fpga目录里的一个system.v文件加入到我的
    发表于 08-16 08:23

    开发板移植蜂鸟E203二代,用IDE测试hello world程序报错是为什么?

    在自己的开发板移植蜂鸟E203二代,用IDE测试hello world程序,报了下面错误,有大佬能帮忙看看嘛,或者遇到过相关的救救孩子,太感谢了。 详细一点的我写在这了,发帖复制粘贴不了
    发表于 08-16 07:44

    蜂鸟FPGA开发板JTAG下载器详细说明

    为了便于初学者能够快速地学习RISC-V CPU设计和RISC-V嵌入式开发蜂鸟E203开源MCU原型SoC定制了基于Xilinx FPGA的专用开发板和专用
    的头像 发表于 11-12 17:10 2.1w次阅读

    蜂鸟FPGA开发板蜂鸟JTAG下载讲解说明

    perips目录主要用于存放各种外设(Peripherals)模块的Verilog RTL代码,譬如GPIO,UART,SPI等。大部分的Peripherals的Verilog RTL代码是直接复制于SiFive的Freedom E310项目中Chisel语言生成的出的Verilog RTL代码,在此基础上将其TileLink总线接口修改成了ICB总线接口,如图3-5中所示的GPIO模块ICB总线接口。
    的头像 发表于 11-26 17:23 9781次阅读
    <b class='flag-5'>蜂鸟</b><b class='flag-5'>FPGA</b><b class='flag-5'>开发板</b>及<b class='flag-5'>蜂鸟</b><b class='flag-5'>JTAG</b><b class='flag-5'>下载</b>器<b class='flag-5'>讲解说明</b>

    蜂鸟FPGA开发板JTAG调试器介绍

    开发板(在本文中将其简称为“FPGA开发板”)和专用 JTAG 调试器(在本文中将其简称为“JTAG 调试器”)。
    发表于 03-23 10:00 41次下载
    <b class='flag-5'>蜂鸟</b><b class='flag-5'>FPGA</b><b class='flag-5'>开发板</b>和<b class='flag-5'>JTAG</b>调试器介绍