首先谈一下自己读RTOS的粗略认识吧,刚开始接触单片机时使用的都是while(true),一个循环处理所有的任务。直到写了一个通过GPRS模块与上层服务通信(长连接)之后,才发现在while(true)中处理好恶心,老是掉线之后连接不上。可能是对AT指令的处理没有搞好,就开始各种找怎么解决,接触到了uC/OSIII,阅读了他提供的文档,阅读了源代码,慢慢看,感觉进步很多,用着用着就爱上了。
低复杂程度的系统通常是用foreground/background systems 或者super-loops,即while(true)。foreground为中断级别,background为任务级别。
uC/OS-III 是一个
抢占式内核,一直处理准备好的最重要的任务。ISR通知或发送信息给高优先级的任务来处理,ISR结束后uC切换到高优先级的任务处理,处理完成之后,切换到低优先级任务处理。
uC/OS-III需要1K~4Kbytes的RAM,还需加上每个任务的堆栈地址。当使用real-time kernel设计了一个系统之后,基本不会使用while(true),我就是一个典型的例子。
特别说明一下Hook(钩子函数):一个允许用户扩展系统功能的函数。在钩子函数内添加具体实现就可以了。
uC OSIII源码结构如下:
1.用户功能任务代码。
2.MCU厂商提供的操作外设的库。
3.对使用的电路板上的MCU的各种功能的初始化和操作。
4.与MCU无关的OS代码。
5.与移植到特定MCU有关。