裸机与RTOS介绍
裸机:只有硬件部分,没有任何软件系统。裸机又被称为前后台系统,前台系统指的中断服务函数,后台系统指的大循环,即应用程序。
特点:
1.实时性差。
2.delay函数是空等待,在此过程中CPU不执行其他代码。
3.结构臃肿,把所有的应用程序都往while(1)里塞。
裸机系统的事件处理方式如下:
while(1)
{
事件1;
事件2;
}
只有当事件1完成后,才能进行事件2。
RTOS(Real Time OS):实时操作系统。
特点:
1.把功能实现划分为多个任务。
2.延时函数过程中可以实现任务调度。
3.抢占式,低优先级任务在执行过程中,高优先级任务就绪后,会执行高优先级任务而不是低优先级任务。
4.任务堆栈:每个任务都有自己的栈空间(用来保存和恢复寄存器值)。简单来说就是在任务执行过程中,被更高优先级任务打断,当回到原先任务时,任务会从被打断处继续执行,而不是从头开始。例如背单词不会因为几天没背就又是abandon。
注意:
1.中断可以打断任意任务。(中断的优先级源于内核,任务的优先级源于软件)
2.任务可以同等优先级。
操作系统的事件处理方式如下:
void main()
{
OSTaskCreate(事件1);//创建事件1任务
OSTaskCreate(事件2);//创建事件2任务
}
void 事件1()
{
while(1)
{
事件1;
}
}
void 事件2()
{
while(1)
{
事件2;
}
}
此处事件1和事件2为相同优先级,且都设置为一个时间片(时间片也就是滴答定时器的中断频率)。那么此时当事件1执行了1个时间片之后,将会执行事件2。同样事件2执行了1个时间片之后,将会执行事件1。
总结:
裸机和RTOS的不同之处在于,裸机只能是一个事件一个事件的进行。也就是在完成事件1之后,才能进行事件2、3、4……而RTOS是做一会儿事件1之后,又去做事件2,做一会儿事件2之后又去做事件3,以此类推,但由于一个事件的持续时间过短,就会给人造成同时在做事件1、2、3的错觉。
而当出现更高优先级的事件时,裸机也需要先完成该事件的之前事件,才能进行更高优先级的事件。而在RTOS中,当前事件会被更高优先级的事件打断,转而执行更高优先级的事件,只有在更高优先级的事件处于空闲状态时,才会执行低优先级的事件。