1、单任务系统和多任务系统
1.1、单任务系统
在单片机(无操作系统)开发中一般采用裸机编程,应用程序是一个无限的循环(应用程序在一个while(1)循环中运行),循环中调用相应的函数完成相应的操作,可将这一部分看作后台行为;中断服务程序处理异步事件,可将这一部分看作前台行为。后台也可以称作任务级,前台可称作中断级,这就是前后台系统,也可称作单任务系统。
单任务系统编程思路:对于简单应用,处理器可以查询数据或者消息是否就绪。就绪后进行处理,然后等待,如此循环下去。但在多数情况下,需要处理多个接口的数据或消息,因此需要多次处理,其流程如下所示:
查询方式无法有效执行对时间要求严格的任务,采用中断方式可有效解决此问题,中断方式流程如下:
虽然采用中断方式可以解决大部分裸机应用问题,但是随着工程的复杂度提升,裸机编程方式的缺点就暴露了:
(1)必须在中断内处理时间关键运算:
- 中断函数非常复杂,并且处理时间很长。
- 中断嵌套可能产生不可预测的执行时间和堆栈需求。
- while(1)循环中断之间的数据交互是通过全局变量进行的。
- 编写应用程序时必须确保数据的一致性,导致变量命名复杂。
- while(1)可以轻松与系统定时器同步,但是如果系统需要多种不同的周期时间,则会很难实现。
- 超过while(1)周期的耗时函数需要做拆分。
(2)while(1)循环使得应用程序变得非常复杂,难以扩展:
- 一个简单的更改可能产生不可预测的错误,对这种错误的分析非常