认识rtos(代码片段)

yangyu-iot yangyu-iot     2023-03-18     514

关键词:

RTOS

  1. 前后台系统:早期嵌入式开发没有嵌入式操作系统的概念,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念。

    通常把程序分为两部分:前台系统和后台系统。

    简单的小系统通常是前后台系统,这样的程序包括一个死循环和若干个中断服务程序:应用程序是一个无限循环,循环中调用API函数完成所需的操作,这个大循环就叫做后台系统中断服务程序用于处理系统的异步事件,也就是前台系统。前台是中断级,后台是任务级。
    技术图片

  2. 实时操作系统(Real-Time Operating System,简写为RTOS):实时操作系统是指面向实时运行对象,并为其服务的操作系统。RTOS是一种系统软件,可以为应用程序提供服务并管理微控制器硬件资源,这些硬件资源包括内存、外设和中断等。

    实时指的是任务(Task)在给定的时间(Deadline)内完成。。一个实时操作系统能保障每个任务能在一个已知的最大运行时间(Maximum Response Time)内完成,包括

    • 高精度计时系统
    • 多级中断机制
    • 实时任务调度机制

    技术图片

  3. 实时操作系统又分为硬实时和软实时。硬实时要求在规定的时间内必须完成操作,硬实时系统不允许超时,在软实时里面处理过程超时的后果就没有那么严格。

    RTOS的核心在于实时内核,是一个可剥夺型的内核。可剥夺型内核就是可以剥夺其他任务的CPU使用权,它总是运行就绪任务中优先级最高的任务,整个过程由任务调度器来完成,任务调度器是操作系统最核心的东西。

  4. 操作系统一般可分为:通用操作系统(OS)和实时操作系统(RTOS)两大类。而实时操作系统(RTOS)根据其运行的处理器不同可以进一步分为:CPU RTOS和MCU RTOS两类。面向MCU或微控制器的RTOS一般也称为嵌入式实时操作系统(embedded real-time operating system)。

    • 通用操作系统(OS)(Windows、Linux、Mac OS…)

      CPU: x86、ARM…

    • 实时操作系统(RTOS)

      • CPU RTOS(THREADX、SylixOS、VxWorks…)

        PowerPC、MIPS、RISC-V、68K、ARM Cortex-A…

      • MCU RTOS(RT-Thread、FreeRTOS…)

        8051、PIC、Arm Cortex-M…

为什么学习RTOS?

随着物联网和人工智能技术快速发展,人们对身边的各种设备要求也越来越高。家里的台灯不仅要能远程开关,还能够通过感知周围环境和记录用户使用习惯自动进行调节;为了随时掌握身体健康状况,各种可穿戴智能手环推陈出新,能够定位,测步,记录心跳等等。

程序的复杂性也在指数级暴增。RTOS(嵌入式实时操作系统)就好比一座“大厦”的地基,只有构筑在坚固可靠的基石上,我们的物联网产品才能应对各种考验。

在8位或16位嵌入式系统应用中,由于CPU能力有限,往往采用单片机开发模式。但是,当嵌入式系统比较复杂、采用32位CPU时,由于处理能力强大,单线程的编程方式不但代码逻辑复杂、容易出错,同时也很难发挥出32位CPU的处理能力。而引入操作系统后,最主要的变化就在于”多线程“,让多任务并行,充分发挥系统资源的能力。

RTOS的好处

  • 降低开发难度,直接使用系统API,即可完成系统资源的申请、多任务的配合(基于优先级的实时抢占调度,同优先级的时间片调度),以及任务间的通信等(如锁、事件等机制)。
  • 增加代码可读性,易于维护和管理。
  • 提升可移植性,对接不同芯片的工作由操作系统完成,应用开发者只需要关注 OS 层接口。

RTOS发展的4个主要阶段

(1)无操作系统阶段

嵌入技术的早期阶段,,没有操作系统的支持,只能通过汇编语言对系统进行直接控制,运行结束后再清除内存。这些装置虽然已经初步具备了嵌入式的应用特点,但仅仅只是使用8位的CPU芯片来执行一些单线程的程序,因此严格地说还谈不上“系统”的概念。 这一阶段嵌入式系统的主要特点是:系统结构和功能相对单一,处理效率较低,存储容量较小,几乎没有用户接口。

(2)简单操作系统阶段

20世纪80年代,嵌入式系统的程序员也开始基于一些简单的“操作系统”开发嵌入式应用软件,大大缩短了开发周期、提高了开发效率。此时的嵌入式操作系统虽然还比较简单,但已经初步具有了一定的兼容性和扩展性,内核精巧且效率高,主要用来控制系统负载以及监控应用程序的运行。

(3)实时操作系统阶段

20世纪90年代,随着硬件实时性要求的提高,嵌入式系统的软件规模也不断扩大,逐渐形成了实时多任务操作系统(RTOS),并开始成为嵌入式系统的主流。此时的嵌入式操作系统已经具备了文件和目录管理、设备管理、多任务、网络、图形用户界面(GUI)等功能,并提供了大量的应用程序接口(API),从而使得应用软件的开发变得更加简单。

RTOS特点:实时性、可裁剪性、可靠性

RTOS市场

如下图,如要查看最新的也可直接搜索Embedded Markets Study,或者查看国内整理的RTOS市场简报

技术图片

RTOS举例

  • FreeRTOS:FreeRTOS是专为小型嵌入式系统设计的可扩展的实时内核。 FreeRTOS操作系统是完全开源的操作系统,具有代码公开、可移植、可裁剪、调度策略灵活的特点,可以方便地移植到各种单片机上运行。
  • μCOS(I/II/III):μC/ OS-II和μC/ OS-III是抢占式,高度便携式和可扩展的实时内核。
  • RTX:Keil RTX是为ARM和Cortex-M设备设计的免版税,确定性的实时操作系统。它允许您创建同时执行多个功能的程序,并帮助创建更好的结构和更容易维护的应用程序。
  • VxWorks:美国WindRiver公司于1983年设计开发的高性能、可扩展的实时操作系统,具有嵌入实时应用中最新一代的开发和执行环境,支持市场上几乎所有的处理器,以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中。
  • **Windows CE **:美国Microsoft公司推出的嵌入式操作系统,支持众多的硬件平台,其最主要特点是拥有与桌上型Windows家族一致的程序开发界面,因此,桌面操作系统Windows家族开发的程序可以直接在Windows CE上运行,主要应用于PDA(个人数字助理)、平板电脑、智能手机等消费类电子产品。但嵌入式操作系统追求高效、节省,Windows CE在这方便是笨拙的,它占用内存过大,应用程序庞大。
  • RT-Linux:美国墨西哥理工学院开发的基于linux的嵌入式实时操作系统,是一款提供源代码、开放式自由软件。RT-linux使用了精巧的内核,并把标准的linux核心作为实时核心的一个进程,同用户的实时进程一起调度。这样对linux内核的改动非常小,并且可以充分利用Linux 下现有的丰富的软件资源。
  • QNX:加拿大QNX公司出品的一种商用的、遵从POSIX标准规范的类UNIX实时操作系统。
  • TI DSP/BIOS: DSP/BIOS是TI公司特别为其TMS320C6000TM,TMS320C5000TM和TMS320C28xTM系列DSP平台所设计开发的一个尺寸可裁剪的实时多任务操作系统内核,具有实时操作系统的诸多功能,如任务的调度管理、任务间的同步和通信、内存管理、实时时钟管理、中断服务管理、外设驱动程序管理等。

国产RTOS

  • RT-Thread:RT-Thread由国内一些专业开发人员从2006年开始开发、维护,除了类似FreeRTOS和μCOS的实时操作系统内核外,也包括一系列应用组件和驱动框架,如TCP/IP协议栈,虚拟文件系统,POSIX接口,图形用户界面,FreeModbus主从协议栈,CAN框架,动态模块等,因为系统稳定,功能丰富的特性被广泛用于新能源,电网,风机等高可靠性行业和设备上,已经被验证是一款高可靠的实时操作系统。
  • Huawei LiteOS:Huawei LiteOS 是华为面向IoT领域,构建的轻量级物联网操作系统,以轻量级低功耗、快速启动、互联互通、安全等关键能力,为开发者提供 “一站式” 完整软件平台,有效降低开发门槛、缩短开发周期。
  • AliOS Things:AliOS Things 是 AliOS 家族旗下、面向 IoT 领域的、高可伸缩的物联网操作系统。
  • TencentOS tiny:腾讯面向物联网领域开发的实时操作系统,具有低功耗,低资源占用,模块化,安全可靠等特点。
  • DJYOS:与传统操作系统不同,DJYOS不是以线程而是以事件为调度核心,这种调度算法使程序员摆脱模拟计算机执行过程编写程序的思维方式,而是按人类认知世界的方式编写应用程序,就如同在嵌入式编程中引入了VC似的。
  • SylixOS:SylixOS 是一个开源的跨平台的大型实时操作系统,SylixOS诞生于2006年,经过十多年的持续开发,SylixOS 已成为功能最为全面的国产操作系统之一。

为什么使用rtos?(代码片段)

目录为什么使用RTOSRTX资源概览为什么使用RTOS(Real-TimeOperatingSystem,RTOS)即实时操作系统,通常应用于嵌入式等对实时性要求较高的产品中。由于嵌入式产品对资源,功耗很敏感,所以RTOS也具备可裁剪、低功耗... 查看详情

rtos的最通俗理解行业大佬用一篇文章带你快速理解rtos(代码片段)

文章目录单片机\\_RTOS\\_架构1.RTOS的概念1.1用人来类比单片机程序和RTOS1.1.1我无法一心多用1.2.2我可以一心多用1.2程序简单示例2.架构的概念2.1用人来类比电子产品2.2要深入理解RTOS就必须深入理解CPU架构3.课程重点5分钟拿下你的三... 查看详情

cmsis-rtos时间管理之时间延迟timedelay(代码片段)

时间管理TimeManagement此RTOS除了可以把你的应用代码作为线程运行,它还可以提供一些时间服务功能,使用这些功能你就可以访问RTOS的一些系统调用。时间延迟TimeDelay在所有的时间服务功能中,最基本的一个就是延时函数。它可... 查看详情

rtos之systick_config()解析(代码片段)

一、SysTick_Config()解析定期性的中断或者异常来作为系统的时基--时钟节拍 SysTick中断频率设置 CM3内核时钟SystemCoreClock=25M /*----------------------------------------------------------------------------SystemCoreClockVariable*-------- 查看详情

基于rtos的软件开发理论(代码片段)

基于RTOS的软件开发理论RTOS的特点任务设计任务的特性任务划分的方法设备依赖性任务关键任务紧迫任务数据处理任务触发条件相同的任务运行周期相同的任务顺序操作任务任务的可调度性分析任务类型单次执行的任务周期性执... 查看详情

rtos任务入口函数执行完之后去哪里了?(代码片段)

1.说明在工作过程中,我发现在实际使用RTOS完成项目时,理解这些知识仅能达到会用RTOS的水平,要想用好RTOS,还需要了解一些比较细节的机制,否则容易掉坑进去,花大量时间定位问题。本文结合TencentOS-... 查看详情

rtos内功修炼记|深度解析rtos内核上下文切换机制(代码片段)

一、风平浪静的程序世界芯片上电的那一刻,犹如小船撑起了帆,开始远航。这艘小船上,PC寄存器负责航行路线,按照路线图(可执行固件)告诉船长(CPU)接下来该往走哪个方向,船长在走... 查看详情

rtos内功修炼记|深度解析rtos内核上下文切换机制(代码片段)

一、风平浪静的程序世界芯片上电的那一刻,犹如小船撑起了帆,开始远航。这艘小船上,PC寄存器负责航行路线,按照路线图(可执行固件)告诉船长(CPU)接下来该往走哪个方向,船长在走... 查看详情

单片机就那点资源,为啥还要用rtos?(代码片段)

对于搞单片机的特别用8051系列工程师来说,谈到单片机的RTOS,很多时候会问一句:“为什么要用RTOS?单片机就这一点资源,使用RTOS能保证效率吗?” 对于这个问题,我会反问:“你用单片机的目的是什么?是为了用... 查看详情

rtos中间件bror&freertos实现bror接口(代码片段)

文章目录RTOS中间件bror&freertos实现bror接口1.介绍2.开源3.bror接口4.示例RTOS中间件bror&freertos实现bror接口本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.1.介绍bror中文名巴拉,是宜家的一种手推车。本文中bror被设计... 查看详情

rtos中间件bror&freertos实现bror接口(代码片段)

文章目录RTOS中间件bror&freertos实现bror接口1.介绍2.开源3.bror接口4.示例RTOS中间件bror&freertos实现bror接口本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.1.介绍bror中文名巴拉,是宜家的一种手推车。本文中bror被设计... 查看详情

rtos中间件bror&freertos实现bror接口(代码片段)

文章目录RTOS中间件bror&freertos实现bror接口1.介绍2.开源3.bror接口4.示例RTOS中间件bror&freertos实现bror接口本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.1.介绍bror中文名巴拉,是宜家的一种手推车。本文中bror被设计... 查看详情

rtos中间件bror&freertos实现bror接口(代码片段)

文章目录RTOS中间件bror&freertos实现bror接口1.介绍2.开源3.bror接口4.示例RTOS中间件bror&freertos实现bror接口本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.1.介绍bror中文名巴拉,是宜家的一种手推车。本文中bror被设计... 查看详情

freertosposix原理(代码片段)

FreeRTOSPosix原理1.FreeRTOS源码原理FreeRTOS可以创建不同优先级的task,RTOS负责管理这些任务。同时提供了队列、信号等功能,这些功能能够使task再不满足条件时挂起,当运行条件满足时触发运行。RTOS依据不同的优先级,创建不同任... 查看详情

arm官方《cmsis-rtos教程》之线程threads(代码片段)

创建线程CreatingThreads一旦RTOS开始运行,就会有很多系统调用来管理和控制活跃的线程。默认情况下,main()函数自动被创建为第一个可运行的线程。在第一个例子里我们使用main()函数创建了其他线程,并且随后让main()结束运行。... 查看详情

rtos临界段的保护(代码片段)

一、概念临界保护:一段在执行的时候不能被中断的代码段。打断临界保护操作:系统调度,外部中断。临界保护的措施:把中断全部关闭。二、使用汇编开关中断2.1、关中断;rt_base_t_rt_hw_interrupt_disable();关闭中断... 查看详情

你需要知道rtos应用程序设计的5个技巧(代码片段)

大家好,我是小麦,今天聊一下RTOS应用程序设计的五个实践技巧。我在编写RTOS应用程序的过程中,经常会遇到这些困难,包括正确确定系统中有多少任务、如何设置优先级、协调任务行为、避免常见陷阱,有... 查看详情

你需要知道rtos应用程序设计的5个技巧(代码片段)

大家好,我是小麦,今天聊一下RTOS应用程序设计的五个实践技巧。我在编写RTOS应用程序的过程中,经常会遇到这些困难,包括正确确定系统中有多少任务、如何设置优先级、协调任务行为、避免常见陷阱,有... 查看详情