实时多任务操作系统(rtos)能有效提高嵌入式平台的资源利用效率,是嵌入式应用的必然趋势。本文阐述了笔者写的基于msp430f149的一个rtos—m430/os,它由汇编写成,短小精干,占用系统资源少,运行稳定可靠,目前已在产品上得到应用。
关键词:rtos、任务调度、msp430
1 rtos的基本概念
实时多任务操作系统(rtos-real time operating system)是根据操作系统的工作特性而言的。实时是指物理进程的真实时间。实时操作系统是指具有实时性,能支持实时控制系 统工作的操作系统。首要任务是调度一切可利用的资源完成实时控制任务,重要特点是要满足对时间的限制和要求。
实时操作系统中的任务(task)有四种状态:运行(executing),就绪(ready),挂起(suspended),休眠(dormant)。
运行:获得cpu控制权。
就绪:进入任务等待队列。通过调度转为运行状态。
挂起:任务发生阻塞,移出任务等待队列,等待系统实时事件的发生而唤醒。从而转为就 绪或运行。
休眠:任务完成或错误等原因被清除的任务。也可以认为是系统中不存在了的任务。
某一时刻,系统中只能有一个任务在运行状态。各任务按级别通过时间片分别获得对cpu的访问权。
rtos内核按照任务的调度机制可以分为两种:一种是占先式内核,一种是非占先式内核。
占先式内核:当一个低优先级的任务正在运行时,一个高优先级的任务就绪,那么rtos就会把低优先级的任务挂起,来运行高优先级的任务。等高优先级的任务执行了一个循环挂起之后,再回到低优先级任务的断点继续运行。也就是说,任务的优先级越高,响应起来越及时。
非占先式内核:当一个低优先级的任务在运行时,一个高优先级的任务就绪,rtos不会把cpu切换给高优先级的任务,必须等低优先级的任务执行了一个循环挂起之后,再由rtos根据所有就绪任务的优先级判断将cpu切到哪个任务。
绝大多数商业rtos, 以及著名的开放源码的uc/os-ii操作系统,都采用的是占先式内核,它的优点是实时性要比非占先式内核高。
在rtos中,一般情况下,每个任务都一无限循环,每循环一次,任务挂起一段时间,以供调度程序把这段时间交给优先级更高的其它就绪任务,让其它任务运行(如图1)。当所有任务都挂起时,rtos把任务切到空闲任务来执行。
图1 任务执行流程图
空闲任务是一个系统任务,它一般是一个空的循环,优先级最低,也从来不会挂起。
2 在msp430上使用rtos的意义
一般的观点认为,msp430上使用rtos是没有意义的。这是可以理解的,因为msp430的硬件资源有限(以msp430f149为例,只有2kram),任何商业操作系统都不可能移植到msp430上。目前在msp430上得到应用的rtos,只有 uc/os-ii,但使用uc/os-ii 必须有昂贵的c编译器,这严重限制了其在msp430上的使用。
正是基于以上情况,笔者在应用msp430过程中,编写了一个基于msp430f149的rtos,暂定名为m430/os。它占用ram量少、代码短小,稍加改动就可适用于大多数其它msp430单片机。
在msp430单片机系统上使用m430/os,对系统有以下意义:
1) 实现软件设计的模块化。可将不同的功能模块编制成相应的任务,由操作系统按级别调用,不必为先执行哪个功能、后执行哪个功能而费神。
2) 更能合理、有