1、概览
嵌入式实时系统需要对整个系统环境产生的事件作出反应。 这些事件对处理时间和响应时间都有不同的要求。在各种情况下,都需要作出合理的判断,以达到最佳事件处理的实现策略:
- 事件如何被检测到?通常采用中断方式,但是事件输入也可以通过查询方式(例如:查询电平高低)获得。
- 什么时候采用中断方式?中断服务例程(ISR)中的处理量有多大?以及 ISR 外的任务量有多大?通常情况下, ISR 应当越短越好。
- 事件如何通知到主程序(这里指非 ISR 程序,而非 main()程序)代码?这些代码要如何架构才能最好地适应异步处理?
值得注意的是:只有以”FromISR”或”FROM_ISR”结束的 API 函数或宏才可以在中断服务例程中。
2、延迟中断
2.1 采用二值信号量同步
概念:
二值信号量可以在某个特殊的中断发生时,让任务解除阻塞,相当于让任务与中断同步。这样就可以让中断事件处理量大的工作在同步任务中完成,中断服务例程(ISR)中只是快速处理少部份工作。 如此,中断处理可以说是被”推迟(deferred)”到一个”处理(handler)”任务。
如果某个中断处理要求特别紧急,其延迟处理任务的优先级可以设为最高,