admin 管理员组

文章数量: 887021

[RTOS

简述

RTOS,即实时操作系统,都是抢占式内核调度,因为一些事件发生时需要实时的去处理,实时操作系统级别的实时处理当然还是软件级别的。而在计算机中,另外有一种硬件级别的实时处理–中断,即发生某个外部事件时,会立刻被CPU捕获并立即进入处理,其延时时间仅是指令级别的。这里仅是基于这两个内容作一些思考,也没有做很多实验来验证,因此可能有思考不合理的地方,仅作初略参考。

RTOS中使用中断要精简

几乎所有的RTOS介绍使用时,都会让Application开发者将中断处理(ISR)的代码精简和短小好,其做法是在进入ISR中后调用RTOS提供的接口将该中断事件通过message(信号量,队列等等)通过RTOS调度器,给到具体的某个优先级别的task去,然后在那个task中,已经有一个事件处理程序在等待这个事件的到来了。
这种处理方式,RTOS中称为中断上半段和下半段处理,外部事件触发中断并送出message即为上半段处理,而在task中处理message即为下半段处理。

原因

其实这种处理方式,仅从代码上看也的确会更加清晰,因为所有要处理的事情都是在task中去做的,因此任务划分很明确的应用系统,代码维护起来也很容易了,不然很多情况还要考虑在ISR中处理的结果,以及ISR处理后可能带来的某些状态的改变等,如果系统庞大,维护会有不少麻烦。
其实一个重要原因是,RTOS的调度是通过CPU来调度的,如果在ISR中处理很长的代码,耗时必然会增加,而在这ISR中,CPU是出于exception状态,而非一般的user mode,因此RTOS的调度都会被中止。更有甚的,该ISR优先级比较高,那么当系统有些timer定时器定时事件到了,那么此时也还没法及时来处理,那timer定时到的中断被挂起,导致后续的计时应用出现误差。

建议


因此除非必要,还是使用中断上半段和下半段处理的方式开发应用比较好。当然有些需要指令级别的实时处理的,就在ISR中处理吧。

本文标签: RTOS