什么是裸机?
我们平时常用的单片机开发,其实就是裸机开发,裸机指内部没有操作系统支持的编程环境,代码的编写执行没有操作系统的支持帮助,需要实现的功能全部都放在在一个 while 里面,功能的运行完全取决于代码的逻辑顺序,如下
就是吃完一碗米饭,最后再吃一盘菜,无法做到吃口饭吃口菜,如果吃完一碗白饭需要半个小时,想要吃上菜就需要等半个小时,很不方便。一旦项目大起来,需要实现的功能就特别多,这时要再想吃口饭就得等很久很久,如下
另外,裸机开发也会造成 CPU 资源的浪费,例如调用 delay 函数时,CPU 就会进入死等状态,期间不会去做任何事,直到 delay 结束。
是否要进入中断服务函数也是根据代码的执行逻辑顺序,只有执行到判断中断标志位了才能进入中断(除了定时器中断),例如。
什么是 RTOS ?
RTOS,Real-time Operation System,是一系列实时操作系统的总称,如 RT-Thread、FreeRTOS、uCOS 等等,是相比于裸机开发的另一种开发方式,就是让单片机载入一个实时操作系统,摆脱裸机的开发环境,实现更高效率的处理方式(多任务调度处理。类似 Linux 的多线程多进程,这也是区别于裸机开发的点)
原本的裸机开发,全部代码只能在一个大循环 while 中按顺序执行,不同功能间的执行可能有较大的时间间隔。如果使用 RTOS,就可以创建多个不同的任务,每个任务负责实现不同功能,通过调度,快速进行任务切换,由于切换速度非常快,肉眼看起来就像是全部功能在同时执行一样,如下
RTOS 的任务就是程序员自定义的函数,如上面的 task1、task2(创建任务函数前需要先定义和声明一些参数,这里不做详细介绍),分别完成不同的事,通过开启任务调度器,任务间可以频繁的进行自动切换,就能实现吃一口饭,再吃一口菜,再吃一口饭...
RTOS 也可以有效的利用 CPU 资源,避免资源浪费,如下
玩游戏之后延时等待一段时间,在这期间会去认真写作业,而不会在那里傻等,直到等待时间结束,才会恢复正常的任务调度
裸机和 RTOS 根本区别:有没有任务调度(即一个没有实时性,一个有实时性)