对于裸机而言,
![](https://img-blog.csdnimg.cn/img_convert/d3fcac6bfee9365ee3519d5dce89f19f.png)
对于RTOS而言
![](https://img-blog.csdnimg.cn/img_convert/afa735bba636e03784dcf720897a418e.png)
即:对于裸机,打游戏意味着不能回消息 回消息意味着不能打游戏
对于RTOS 打游戏和裸机的切换只需要一个时间片节拍 1ms 从宏观来看 就是同时进行的两件事(但要在这两件事情的优先级一样的情况下)
![](https://img-blog.csdnimg.cn/img_convert/909015cecde037c12d4ea0c0fbbbfc16.png)
如果这个时候肚子疼 (肚子疼优先级高)
裸机 :一旦肚子疼 触发中断 中断里flag置1 会产生一个更高优先级的中断
(中断里面不能写太多的程序 不然会卡死的)flag=1 赋值完之后又回去执行打游戏(因为中断会保护现场)直到执行完,又继续执行回复信息(),最后到了if ,才会执行去医院。
![](https://img-blog.csdnimg.cn/img_convert/15b86591fbc9ef1e7c802737fbc9f3d2.png)
RTOS:去医院的优先级最高 先去医院 如果去医院函数里面有延时 在进行延时的时候让出CPU资源,可以让让打游戏和回复信息执行
![](https://img-blog.csdnimg.cn/img_convert/caa908edbbcfcebf9e7e3d79c6c25f82.png)
4、
![](https://img-blog.csdnimg.cn/img_convert/37e8d983ee78085c36f4089d46a89a41.png)
![](https://img-blog.csdnimg.cn/img_convert/4a23f7fdc6870dbc616e04645b681e18.png)
任务堆栈:把中断来之前的寄存器数据存起来 中断执行结束继续从断点处执行
每建一个任务 MPU就要分配一个任务堆栈给这个task
软件设置优先级 不限 可以设置无穷多个任务
硬件设置优先级 以STM32为例 优先级可设置为0~31 数字越大 优先级越高
虽然从软件来说 理论上可以设置无穷多个任务,但是每建一个任务 ,MPU就要分配一个任务堆栈给这个task,所以实际任务的创建还是有限的。
2、