裸机:
没有运行OS的计算机。一般我们利用中断和循环构建前后系统完成的工程就是裸机工程。中断为前台,针对各种突发的中断源进行及时响应,循环是后台,稳定执行一些常驻的重复性工作。
裸机的优势:在裸机工程中,编写者对代码的执行情况是一清二楚的,只要编写者秦楚中断到来的时刻,就能知道每一时刻中单片机在执行哪段代码,另外裸机工程由用户手动分配堆栈,所以总体上裸机工程是完全可控的,这也使得裸机的调试难度比较低。
裸机的缺点:
当工程比较复杂,耗时、耗资源的任务多时,裸机工程必须在中断编写复杂的逻辑或者执行耗时的任务时,就会导致裸机工程的执行效率非常低下,丧失实时性。因为两个中断之间有时间间隔,如果优先级高的中断执行时间大于两个中断时间间隔,那么低优先级的中断可能会无法响应。所当中断数更多,中断之间的时间间隔更短,而需要执行的任务耗时更长情况下,裸机工程跑起来将会很惨。
OS (操作系统):
OS(Operating )操作系统,比如我们常用的window系统、mac系统,android系统,ios系统、linux系统等,都属于操作系统。
操作系统的本质是一个特殊的软件,直接管理硬件,同时为各个应用程序划分资源(内存,堆栈,时间片等),并提供控制(调度,同步)。
不管是计算机还是单片机,在任何时刻只能运行一段代码,顶多是运行速度上会有差距,为什么我们能够在电脑上打开多个软件同时流畅的使用,就需要归功于操作系统对于软件的控制。操作系统会将各个应用程序抽象成进程,给每个进程独立的分配资源,同时对他们进行调度,使得每一个进程都仿佛在独占整个计算机。
由于单片机资源较少,一般在单片机上运行的操作系统具有功能精简,实时性强的特点,被称为RTOS(real time operating stsstem)实时操作系统。单片机上的RTOS非常多,国外常见的RTOS包括FreeRTOS,uCOSII等,国内这几年做的RT-Thread操作系统也发展的很好。
OS优势:
1>资源利用效率高、空间利用效率高:OS可以通过释放执行完毕的任务的资源来空出新的存储空间,让新的任务得以执行,所以能够执行的总任务数量大大高于裸机。
2>时间利用率高:针对裸机的劣势,OS可以将耗时的任务放到任务中,交给OS来调度;中断中只需要执行耗时短的重要代码,这样中断就能够得到及时的响应,即使有多个复杂,耗时的任务也能够实时的进行处理。
3>更高的任务调度机制:
OS可以提供一些裸机不具备的功能,比如信号量,消息队列,任务通知等,用来管理复杂情况下的资源分配或者进程同步。(比如信号量,信号量的功能是实现各个任务对临界资源的互斥访问)
一段程序一般划分为三个阶段:开始执行->执行中->执行完成。恰好对应进程的工作状态:就绪态->运行态->挂起态(另还有一个阻塞态,对应为程序执行到一般被暂停的状态)
OS劣势:由于任务调度和堆栈分配都是由OS来完成的,编写者并不知道任意时刻OS内部的执行情况,因此如果出现了问题,调试难度比较大,很多时候需要借助特殊的调试工具帮助查找问题,比如FreeRTOS就有专用的调试工具FreeRTOSViewer.