初识RTOS

操作系统

1.1 定义

​ 嵌入式操作系统(Embedded Operating System,简称:EOS)是指用于嵌入式系统的操作系统。嵌入式操作系统是一种用途广泛的系统软件,通常包括与硬件相关的底层驱动软件、系统内核设备驱动接口、通信协议图形界面、标准化浏览器等。嵌入式操作系统负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。在嵌入式领域广泛使用的操作系统有:嵌入式实时操作系统µC/OS-II、嵌入式Linux、[Windows Embedded](https://baike.baidu.com/item/Windows Embedded/0?fromModule=lemma_inlink)、VxWorks、Intewell操作系统 [4]等,以及应用在智能手机平板电脑AndroidiOS华为鸿蒙等。

1.2 实时操作系统

​ RTOS实时操作系统就是类似于linux,windows的一个多任务操作系统。理论上仍然只有一个程序在运行,但它 会在各个任务之间进行资源调度,看上去像是在并发执行每一个任务(多线程/多进程)。

​ RTOS操作系统:UCOS,FreeRTOS,RTX,RT-Thread,DJYOS等。
​ RTOS操作系统的核心内容在于:实时内核。

​ 实时操作系统(RTOS)是指当外界事件或者数据产生的时候,能够接收并以足够快的速度给与处理,其处理的结构又能在规定的时间内来控制产生过程或者对处理系统作出快速的相应,并控制所有实时任务协调一致运行的操作系统。(Linux和Windows等都是分时操作系统)。

整理成一句话“如果逻辑和时序出现偏差将会引起严重后果的系统”!!!

实时操作系统分为两类:硬实时操作系统和软实时操作系统。

硬实时操作系统规定某个动作必须在规定的时刻内完成或发生,比如汽车生产车间,焊接机器必须在某一时刻内完成焊接,焊接的太早或者太晚都会对汽车造成永久性伤害。

软实时操作系统虽然不希望偶尔违反最终的时限要求,但是仍然可以接受。并且不会引起任何永久性伤害。比如数字音频、多媒体、手机都是属于软实时操作系统。

基本特征:

​ 1.实时操作系统首先是多任务操作系统。

​ 2.多级中断机制。

​ 3.优先级调度机制(可剥夺内核)。

说明:

​ 可剥夺内核顾名思义就是可以剥夺其他任务的cpu使用权,它总是运行就绪任务中的优先级最高的那个任务。

1.3 任务

​ 实时操作系统的是多任务的操作系统,系统中必然有多任务在执行。其中包括有用户任务,也有操作系统的自己的系统任务。多任务的运行相对于其他的系统,其优点是多任务运行使CPU的利用率得到最大的发挥,并使应用程序模块化。使用多任务,应用程序将更容易设计与维护。

在嵌入式应用的场合的多任务使用的例子是在一个ARM采集处理系统中,同时采集16路信号,同时又要对多信号进行处理和传输,可以创建16个任务负责16路信号的采集,创建一个任务对信号进行处理,再创建一个任务负责数据的传输。

操作系统的本质或者说唯一的目标就是榨干CPU,一刻也不能停止工作。

1.4 任务状态

​ 1、睡眠态

​ 任务已经被装入内存,可是还没有准备好运行。以代码的形式存在于内存中,在调用OSTaskCreate(任务创建函数)之前都处于睡眠态。睡眠状态的任务不会得到运行,操作系统也不会给其设置为运行而准备的数据结构。

​ 2、就绪态

​ 当操作系统调用OSTaskCreate创建一任务后,任务就进入就绪态。任务也可以从其他状态转到就绪态。处于就绪态的任务操作系统已经为其运行配置好了任务控制块等数据结构,当没有比其更高优先级的任务,或比其优先级更高的任务处于阻塞状态的时候,就能被操作系统调度而进入运行态。从就绪态到运行态,操作系统调用任务切换函数完成。

​ 3、运行态

​ 任务真正占有CPU,得到运行。这时运行的代码就是任务的代码。处于运行态的任务如果运行完成,就会转为睡眠态。如果有更高优先级的任务抢占了CPU,就会转到就绪态。如果因为等待某一事件,例如等待一秒钟的时间,如OSTimeDly(OS_TICKS_PER_SEC),需要暂时放弃CPU的使用权而让其他任务得以运行,就进入了阻塞状态。当由于中断的到来而使CPU进入中断服务程序(ISR),必然使正在运行的任务放弃CPU而转入中断服务程序,这时被中断的程序就被挂起而进入挂起态。 总之,任务要得到运行必须进入运行态,CPU只有一个不能让每个任务同时进入运行态,进入运行态的任务有且只有一个。

​ 4、阻塞态

​ 阻塞对于操作系统的调度,任务的协调运行是非常重要的。当运行态任务在没有事情可做,等待一秒的时候,不是强行的运行代码,而是把自己堵塞起来,使操作系统可以调度其他的任务。当任务在等待某些还没有被释放的资源,等待一定的时间的时候,要阻塞起来,等到条件满足的时候再重新回到就绪态,又能被操作系统调度以进入运行态,这是实时系统必须要实现的(在等待的时候,常常使用FOR循环,不停的执行代码而使CPU的利用率暴增,使系统的运行环境十分恶劣,甚至造成死机,是不可取的。)功能之一。

5、挂起态

​ 当任务在运行的时候,因为中断的发生,例如定时器中断每个时钟滴答(clock tick,指每个时钟周期)中断一次,而被剥夺CPU的使用权,而进入挂起态。在中断返回的时候,若该任务还是最高优先级的,就恢复运行,如果不是这样,只能回到就绪态。

运行流程图:
在这里插入图片描述

1.5 任务切换

​ Context Switch(任务切换),是任务调度的重要部分,当多任务内核决定运行另外的任务的时候,它保存正在运行任务的当前状态(Context),即CPU寄存器的全部内容,把这些内容保存在自己的栈区当中。入栈工作完成以后就是把下一个将要运行的任务的当前状态从该任务的栈中重新装入CPU的寄存器,并开始下一个工作的进行。任务切换过程增加了应用程序的额外负荷。CPU的内部寄存器越多,额外负荷就越重。任务切换是暂停一个任务的运行,运行另一个就绪的任务。如果想暂停一个任务,以后又能恢复运行,那么必须考虑将这个任务运行的信息保存,而恢复运行的时候需要将这些信息恢复到运行环境。

1.6 UCOS操作系统与freeRTOS以及RT-thread区别

​ FreeRTOS:一种开源的实时操作系统,特别适用于低功耗、资源有限的嵌入式系统。它提供了一套简单的任务管理、时间管理和通信机制。

​ ucOS:一种可裁剪的、可移植的实时操作系统。它支持多任务处理、互斥和信号量等特性,适用于各种嵌入式系统。

​ Zephyr:一种开源的实时操作系统,专为低功耗、支持多种处理器架构的嵌入式设备设计。它具有灵活的内核配置和易用的开发框架。

​ RT-Thread:一款开源的实时嵌入式操作系统,适用于资源有限的系统。它具有小巧、灵活的特点,支持多任务处理、时间管理和设备驱动。

​ NuttX:一种基于POSIX标准的开源实时操作系统,适用于嵌入式系统和各种控制器硬件平台。

​ TinyOS:一个用于传感器网络的开源操作系统,专注于低功耗、小型化和实时性。

​ uClinux:是一个针对嵌入式系统和微控制器的Linux内核。相较于传统的Linux内核,uClinux对内存管理和任务调度进行了优化,以适应资源受限的嵌入式环境。

​ 这些轻量级嵌入式操作系统具有小巧、快速、高效和可裁剪的特点,适合在资源受限的嵌入式系统中使用。根据具体的应用场景和需求,可以选择适合的嵌入式操作系统进行开发和部署。

FreeRTOS介绍:

​ FreeRTOS(Free Real-Time Operating System)是一款流行的开源实时操作系统,旨在为嵌入式系统提供实时性能和可靠性。下面是一些关于FreeRTOS的重要特点:

实时性能:FreeRTOS支持实时任务调度,可以满足对实时性要求较高的应用场景。它使用轻量级的抢占式调度算法,并提供多种调度策略供选择。

多任务处理:FreeRTOS支持多任务处理,可以在单个设备上同时运行多个任务。它通过任务管理器和任务优先级来安排任务的执行。

内存管理:FreeRTOS提供灵活的内存管理功能,可以依据具体需求配置内存分配算法,包括固定大小的内存块分配和动态内存分配。

任务通信与同步:FreeRTOS提供了多种机制来实现任务之间的通信与同步,包括消息队列、信号量、互斥锁和事件标志等。这些机制使得不同任务能够安全地共享资源和进行协作。

硬件支持:FreeRTOS可在多种处理器架构和嵌入式设备上运行,包括ARM、MIPS、RISC-V和X86等,并提供了针对不同处理器的硬件抽象层。

可扩展性:FreeRTOS具有模块化的设计,可以根据需求选择不同的内核组件和功能模块,从而灵活构建适合特定应用的嵌入式系统。

FreeRTOS作为一款轻量级的嵌入式实时操作系统,已经广泛应用于各种领域,包括物联网、工业自动化、消费电子和汽车电子等。它具有易用性、可移植性和可裁剪性等优势,为嵌入式系统开发者提供了强大的工具和框架。

UCOS介绍:

​ uC/OS-III是一款开源的实时操作系统,为嵌入式系统提供了可靠且可裁剪的操作系统解决方案。以下是关于 uC/OS-III的一些重要特点:

UCOS的任务优先级有64个,范围是0~63。都比中断低。

实时性能:uC/OS-III的设计目标是提供可预测的实时性能。它使用优先级和时间片轮转的调度算法,能够满足实时系统对任务响应时间的要求。

多任务处理:uC/OS-III支持多任务处理,可以在单个设备上同时运行多个任务。任务间的切换和调度是基于优先级的,具备抢占式和非抢占式两种任务调度模式。

任务通信与同步:uC/OS-III提供多种机制来实现任务之间的通信与同步,包括信号量、互斥锁、消息邮箱和消息队列等。这些机制使得任务能够合作共享资源,并进行可靠的同步操作。

内存管理:uC/OS-III具备灵活的内存管理功能,支持两种内存分配策略:固定大小的内存块分配和动态内存分配。可以根据实际需求配置和优化内存使用。

中断处理:uC/OS-III提供可靠的中断处理机制,具备中断屏蔽和中断优先级处理的功能。可通过中断处理机制实现与外部设备的高效交互。

可移植性:uC/OS-III是可移植的操作系统,可以适配不同的微处理器架构和开发环境。已经在多种处理器架构和嵌入式平台上成功应用。

低开销:uC/OS-III具有相对较低的内核开销,适用于资源有限的嵌入式系统。它的内核代码非常精简,运行效率高。

由于其可靠性、实时性和可裁剪性等特点,uC/OS-III已经广泛应用于嵌入式系统领域,包括工控系统、通信设备、医疗设备等。开发者可以根据具体需求和系统资源配置uC/OS-III,实现高效可靠的嵌入式应用程序。

在这里插入图片描述

RT-Thread

​ RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(v3.1.0以及以前版本遵循GPLv2+许可协议,v3.1.0以后版本遵循 Apache License 2.0 开源许可协议)。实时线程操作系统不仅仅是一个单一的实时操作系统内核,它也是一个完整的应用系统,包含了实时、嵌入式系统相关的各个组件:TCP/IP协议栈,libc接口,图形用户界面等。

​ RT-Thread(Real-Time Thread)是一款开源的实时操作系统,专为嵌入式系统和物联网设备设计。以下是关于RT-Thread的一些重要特点:

实时性能:RT-Thread具有快速的上下文切换和低延迟的特性,以满足实时系统对任务响应时间的要求。它采用抢占式调度算法,支持多优先级任务调度。

多任务处理:RT-Thread支持多任务处理,可以在单个设备上同时运行多个任务。它提供了灵活的任务管理机制,包括任务创建、删除、挂起和恢复等。

组件化设计:RT-Thread采用组件化的设计理念,可以选择性地加载和配置各种功能组件,以满足特定应用的需求。它提供了丰富的组件库,包括文件系统、网络协议栈、设备驱动、通信协议等。

轻量级和高效性能:RT-Thread的内核代码非常精简,运行效率高。它采用了很多优化措施,包括内存池管理、对象池管理和线程本地存储等,以提高系统的效率和资源利用率。

设备驱动支持:RT-Thread提供了支持多种设备驱动的机制,包括GPIO、UART、SPI、I2C、USB等。它具有简单易用的驱动层和设备模型,能够方便地与各种硬件进行交互。

开放源代码和丰富的社区支持:RT-Thread是一款开源的操作系统,具有活跃的开发社区和丰富的开发资源。用户可以获取开源代码、参与社区讨论、分享经验和获取技术支持。

由于其灵活性、高效性和可裁剪性等特点,RT-Thread已经广泛应用于物联网、智能家居、工业自动化和消费电子等领域。开发者可以通过配置和定制RT-Thread,实现高度定制化和可靠性的嵌入式应用程序。

1.7 RT-Thread、uC/OS-II和FreeRTOS应用场景比较

RT-Thread、uC/OS-II和FreeRTOS都可以用于嵌入式系统开发,但它们在应用场景上存在一些差异。以下是它们的应用场景比较:

RT-Thread:

​ RT-Thread适用于中等到高端的嵌入式系统,特别是那些需要丰富功能和可扩展性的应用。
RT-Thread提供了灵活的组件化设计,可以根据具体需求自由加载和配置功能模块。
它支持动态组件加载和热插拔,以及多线程并发执行。
RT-Thread具有较高的实时性能和响应性,适用于对实时性要求较高的应用。
uC/OS-II:

​ uC/OS-II适用于资源有限的嵌入式系统,特别是那些对实时性要求较高且轻量级的应用。
uC/OS-II具有较低的内存和运行开销,适合小型的嵌入式系统。
它提供了可抢占式内核,支持任务优先级和时钟节拍。
uC/OS-II在实时性能和响应性方面表现良好,适用于时间敏感的应用。
FreeRTOS:

​ FreeRTOS适用于广泛的嵌入式应用,从低端、资源受限的系统到高端、功能丰富的系统。
它具有较低的内存占用和高度可移植性,可适配多种处理器架构和开发平台。
FreeRTOS提供了丰富的组件库和可选功能模块,如文件系统、网络协议栈和设备驱动等。
它有一个庞大的社区支持,提供了丰富的文档、示例代码和第三方扩展。
综上所述,选择适合的操作系统应基于应用需求、资源限制和个人偏好进行评估。对于需要丰富功能和可扩展性的中等到高端系统,可以考虑使用RT-Thread;对于资源有限且对实时性要求较高的系统,可以选择uC/OS-II;而对于广泛的应用场景以及较高的可移植性需求,FreeRTOS是一个不错的选择。

1.7 前后台系统

​ STM32学习的都是裸机形式,通常把程序分为两部分:前台系统和后台系统。前台是中断级,后台是任务级。

  • 裸机:没有任何操作系统
  • 前台系统:中断
  • 后台系统:主程序中的循环

在这里插入图片描述

1.8 UCOS学习方法

​ 1. 多练

​ 不要知看书,或者只看资料,只看没有任何作用,一定要动手写代码练习,多在开发板上练习。

  1. 遇到不懂的怎么办?

    UCOS还是有一定难度的,在学习的过程中难免会遇到看不懂的知识点,如果遇到先放下,先学会调用

    UCOS API接口,等以后有时间再回头研究。

  2. 对C语言的要求

    需要了解指针,结构体,数据结构中的链表,队列等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值