FreeRTOS基础(一):FreeRTOS入门

        各位看官好,欢迎大家进入新的专栏学习,从今天开始,正式进入FreeRTOS的学习,这是专门应用于嵌入式领域的一款实时操作系统,相比裸机,它有很大的优势,实际开发中应用广泛,为此,我们应该首先掌握最基本的内容,理解实时操作系统的实时性是通过哪些机制实现的?相比裸机开发,它的优势在哪里?这样更加有利于我们运用好FreeRTOS来解决生活中问题。

目录

一、RTOS入门

1.0 裸机与RTOS的举例对比

1.1 裸机与RTOS介绍

1.1.1 裸机

1.1.1.1概念

1.1.1.2特点

1.1.1.3 图示

1.1.2 RTOS

1.1.2.1 RTOS的概念

1.1.2.2 RTOS的特点

1.1.2.3 图示

1.2 FreeRTOS简介

二、FreeRTOS基础知识(非常重要)

2.1 任务调度简介

2.1.1 概念

2.1.2 实现方式

2.1.3 抢占式调度

2.1.4 时间片调度

2.2 任务状态

2.2.1 任务状态基本知识

2.2.2 四种任务状态的转换图

2.2.3 任务状态列表

2.2.4 举例理解列表随着任务状态的变化

三、FreeRTOS移植

3.1 获取FreeRTOS源码

3.2 源码结构介绍

 3.2.1 源码整体结构

 3.2.2 FreeRTOS文件夹结构

 3.2.3 Source文件夹结构如下

3.2.4 ​​​​​​​portable文件夹结构

3.2.4.1 RVDS 文件夹

3.2.4.2 MemMang 文件夹

3.3 FreeRTOS手把手移植(掌握)

3.3 最终修改成功的config⽂件

3.4 系统配置文件说明

四、移植测试


一、RTOS入门

1.0 裸机与RTOS的举例对比

        为了初步感知裸机与实时操作系统的区别与优势,我们这里简单的举个例子,通过例子来理解二者。

正如上面图片所示,有一个人正在打游戏,这时候有人给他发消息,两件事的优先级相同,对于裸机系统而言,它必须等打完游戏才能去回复消息,每个任务是按照程序编写的顺序执行的。

裸机处理方式:打游戏和回复信息,需要打完游戏才可回复信息,或者回复完信息才可打游戏

而对于RTOS它又是怎么处理的呢?它会将每件事独立构成一个任务(这个任务函数是无返回值并且是死循环),然后以系统滴答定时器的时钟作为一个时间片即1ms, 每隔1ms去做另一个任务,在这两个任务之间切换,微观上看,我们的两个任务是按照顺序依次执行的,但是,由于1ms时间非常短,宏观上看,我们人眼根本分辨不出来,因此这两个任务其实就是并发运行的(一个时间片只有一个任务在执行),这样就不存在等待。

RTOS处理方式:打游戏和回复信息,不需要等某一件事做完,可每间隔1ms(一个时间片时钟节拍),然后交替做这两件事,因为速度很快,从宏观的意义上来看,类似同步执行!

同样的场景,假设此时小明肚子疼了,要去医院,即这时出现了更高优先级的任务,此时裸机与RTOS又会怎么做呢? 

回忆Stm32裸机开发,我们其实是利用中断处理的,设立一个标志位,中断条件触发,标志位改变,判断标志位,然后去执行中断处理服务函数,在这里也是这样,肚子疼就相当于一个中断,一旦发生,就要立马去医院,但是它存在一个问题:首先,中断只能处理简单的短时间的任务,不能在中断里停留较长的时间,其次,如上图所示,去医院必须要等打游戏和回复信息,两件事完成,才会去判断,而这两件事又是需要一定的时间的,缺乏一种实时性的处理能力!

如上图RTOS的处理方式,它将去医院看病这件事设置成更高的优先级,前面两件事优先级相同,当去医院这件事发生后,首先就去执行它,前面两件事不进行处理,并且,实现试想生活中,去医院途中要打车,坐车,...各种事消耗时间,在程序里面就是延时,在裸机开发中,延时的时候CPU什么也不做,处于一种空转的状态,而在RTOS中,它并不是这样,延时的时候,CPU会去做低优先级的任务,即前面两件事,等这段时间过去后,到了医院门口,回来接着去看病,这样的优势在于它充分的利用了CPU的资源,不让CPU停下来,一直在不同的任务之间进行切换。

1.1 裸机与RTOS介绍

1.1.1 裸机

1.1.1.1概念

        裸机:直接对硬件资源的编程,所有功能函数放在主循环中,同⼀时间只能单⼀任务运行。裸机又称为前后台系统,前台系统指的中断服务函数,后台系统指的大循环,即应用程序。

1.1.1.2特点

可以看出来:裸机系统是轮流执行的,因此必须等一个任务完成才能完成下一件任务,这带来的后果就是:实时性差,当处于延时的时候,CPU处于一种空转的状态,这样会浪费CPU的资源 ,此外,所有实现的功能都放在死循环里面,如果任务非常多,将导致结构非常臃肿!

1.1.1.3 图示

1.1.2 RTOS

1.1.2.1 RTOS的概念

       RTOS 全称是 Real Time Operating System,中文名就是实时操作系统,强调的是:实时性。

1.1.2.2 RTOS的特点

RTOS实现功能划分为多个任务,并且在延时的时候,不会空等待,会让出CPU的使用权给其他任务,即任务调度,这是操作系统内部自己实现的调度算法,高优先级任务抢占低优先级任务,同一优先级任务按照时间片轮转的方式执行,为了保证高优先级任务执行完后,低优先级不用再重新开始执行,每个任务都有自己的栈空间,用于保存局部变量以及任务的上下文信息。

1.1.2.3 图示

       可以看出:每个任务都是一个死循环,这是为了保证能够高优先级执行完后,能够继续执行低的优先级任务,如果低优先级任务执行到一半,被高优先级任务打断,低优先级任务不是死循环,那就执行不了低优先级的任务了。

注意两点:

1、任务可以是同等优先级的;

2、中断可以打断任意任务;

思考:如果高优先级的任务一直在运行,会怎么样?

如果高任务的优先级里面没有延时函数,那么,它就不会让出CPU的使用权,并且高优先级任务是死循环的,它将会一直执行下去,使得低优先级任务无法运行!!!

1.2 FreeRTOS简介

       RTOS是指一类系统,如 FreeRTOS,uC/OS,RTX,RT-Thread 等,都是 RTOS 类操作系统。FreeRTOS 是一个免费的嵌入式实时操作系统,其开源、轻量级、可移植的特点使其成为许多嵌入式开发者的首选。在近几年的使用排名上位居前列。

FreeRTOS的特点: 

学习资料:

FreeRTOS官网:https://www.f

FreeRTOS个迷你的实时操作系统内核,属于RTOS(实时操作系统)类操作系统。作为轻量级操作系统,其功能涵盖任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,基本能满足较小系统的需求。由于RTOS需占用定系统资源(尤其是RAM资源),只有少数实时操作系统能在小RAM单片机上运行,FreeRTOS便是其中之。与μC/OS - II、embOS等商业操作系统相比,FreeRTOS完全免费,具有源码公开、可移植、可裁减、调度策略灵活的特点,能方便地移植到各种单片机上运行,最新版本为10.4.4版 [^1]。 选择FreeRTOS的原因有多个方面。它是免费的,很多半导体厂商产品的SDK(软件开发工具包)会使用FreeRTOS作为操作系统,特别是WIFI、蓝牙等带有协议栈的芯片或模块。而且其文件数量少,相对简单,只实现了内核,出货量较大,不过使用资料多,深入资料少 [^1]。 在与其他系统的区别方面,文档提及了它与Linux、单片机的对比,但未详细展开。 关于使用指南,般可按以下步骤进行开发: ```python # 1. 下载FreeRTOS源码 # 从官方网站或开源仓库获取最新版本的FreeRTOS源码 # 2. 移植到目标平台 # 根据目标单片机或开发板的特性,修改FreeRTOS的移植层代码,如端口文件、内存管理文件等 # 3. 配置FreeRTOS # 根据项目需求,修改FreeRTOSConfig.h文件,配置任务数量、堆栈大小、调度算法等参数 # 4. 创建任务 # 使用FreeRTOS提供的API函数创建任务,例如: import FreeRTOS def task_function(): while True: # 任务的具体逻辑 pass # 创建任务 task_handle = FreeRTOS.xTaskCreate(task_function, "TaskName", configMINIMAL_STACK_SIZE, None, tskIDLE_PRIORITY + 1, None) # 5. 启动调度器 # 调用vTaskStartScheduler()函数启动FreeRTOS调度器 FreeRTOS.vTaskStartScheduler() ``` 应用案例方面,在很多嵌入式设备中都有应用。例如在智能家居设备里,对于具备WIFI功能的智能插座,可使用FreeRTOS进行任务管理,个任务负责与手机APP进行通讯,另个任务负责控制插座的通断;在工业控制领域,对于些小型的传感器节点,使用FreeRTOS可以管理传感器数据的采集和传输任务。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来可期,静待花开~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值