RTOS介绍
对于裸机而言,程序是在一个大循环while()中,执行逻辑是顺序执行,只有执行了上方的语句,才能执行下方的语句,无法实现多线程的操作。
RTOS是一个实时操作系统(类似linux),他对于不同的语句,可以创建不同的任务,并且这些任务可以同时运行,即同时处理不同的事情。
RTOS的时间片,一个时间片的大小是1ms(我们一般设置1ms),每隔1ms切换一次任务,虽然也是同一个时刻只能做1件事,但是因为1ms的时间太短,从人的宏观意义上来看,是几乎没有区别的。
突发事件
在裸机上我们定义“中断”来处理突发事件,中断是一瞬间的事情,也就是说你在中断函数里面不能做太多事情,如果中断函数时间过长,会导致程序上的很多问题;所以在裸机上,我们一般是定“标志位”来表示触发了中断,然后再在while循环里套一个if语句来判断标志位的状态,从而在主循环里执行相对应的功能。但这往往就会有个问题,那就是既然还在主循环里,那只有执行完前面的语句,才能执行到if语句,这时候裸机的“弊端”就比较明显了,实时性会差一些。
RTOS是如何处理突发事件的呢?
RTOS会同时创建多个任务,并且每个任务的优先级是不同的,我们把突发事件的任务优先级拉高,就会优先执行突发事件,并且在执行突发事件的过程中,如果有系统延时,那么在这个延时的期间,RTOS会自动的继续执行低优先级任务,充分利用了CPU的资源。
特点
裸机:裸机又称为前后台系统,前台系统指的中断服务函数,后台系统指的大循环,即应用程序 。

RTOS特点:RTOS全称为Real Time OS,就是实时操作系统,强调的是:实时性。
低优先级在运行的过程中,可以被高优先级的任务打断,高优先级的任务可以被更高优先级的任务打断,更高优先级的任务可以被中断打断。每一个任务自己就是一个无限循环,每个任务都是单独的、独立的。
每一个任务都是有一个单独的栈空间,栈空间有什么用呢?
栈空间就是为了保存数据,为什么要保存数据呢?因为当我们的任务被更高优先级的任务打断时,肯定要返回到“被打断的点”,而不是“从头开始运行”,想要不“从头开始运行”,就要有栈空间来记录此时的数据,以便于返回到“被打断的点”来继续执行任务。
如果高优先级的任务一直执行,那么低优先级的任务是无法运行的,除非高优先级的任务进入了阻塞态(延时、等待信号量、等待互斥量),此时才能运行低优先级的任务。

FreeRTOS简介

注意:这里的优先级不限,是指你使用的最高优先级算法时使用的软件方法(通用方法)。但是如果你是使用了硬件方法,这个就受限于MCU的一个架构了,就比如说STM32是32位的,那么优先级就会被限制在32,就是0~31这个范围(数字越大,任务优先级越高,和中断优先级是相反的)。
