1、引言
嵌入式系统由于它具有软件代码小、高度自动化、响应速度快等特点已经使它在许多领域得到广泛的应用[3]。从家里的洗衣机、电冰箱,到作为交通工具的自行车、小汽车,到办公室里的远程会议系统等。嵌入式系统通常由硬件环境和操作系统构成。在嵌入式操作系统的统一调度管理下实现对所有系统资源的合理利用和分配,达到提高系统性能和有效利用有限资源的目的。μCOS-Ⅱ作为一个源码开放的嵌入式实时操作系统,同时具有良好的可移植性、可裁剪性、可剥夺性、稳定性和可靠性等优点,使其成为许多嵌入式操作系统的首选。本文将μCOS-Ⅱ在Freescale的8位处理器芯片HC9S08上移植实现。
2、μCOS-Ⅱ系统结构
μCOS-Ⅱ是一个完整的可移植可固化可裁剪的抢占式实时多任务内核。可以在不需要做很大修改的基础上方便的移植到多种处理器上。条件是:该处理器要具有一定数量的堆栈,能够使用软件中断,产生定时器中断,此外,编译器要支持可重入代码,并且要能使用汇编实现对处理器内部寄存器的相关操作[2][4]。通过μCOS-Ⅱ的管理,使多个任务之间相互协调,分时的占用CPU,实现充分利用资源和实时等相应的功能。
任务通常是一个死循环,用来完成某一特定的功能;一个任务相当于一个线程。μCOS-Ⅱ可以管理多达64个任务,每个任务都具有一个唯一的合法优先级。但是,优先级最低的那个任务已经被系统定义为空闲任务,用户不能使用。用户可以通过函数OSTaskCreate()来创建任务,通过OSTaskDel()来删除任务。任务可能有以下五种状态:睡眠态、就绪态、运行态、等待状态、中断服务态。利用不同的系统函数可以实现任务在各状态之间的转换。μCOS-Ⅱ通过对就绪表的操作总是选择在就绪任务中优先级最高的那个任务开始运行。任务级的调度是由函数OSSched()来完成的;而中断级的调度是由OSIntExt()完成的。任务切换的过程分为两步:将被挂起任务的处理器寄存器状态保存在它的任务堆栈中;将将要执行的任务堆栈中保存的寄存器值弹到处理器中,然后执行中断返回指令。这样新的任务就拥有了CPU,开始执行。直到它挂起,或者是被更高优先级的任务中断。μCOS-Ⅱ就是在对各种任务的切换之间起协调作用的协调者。
3、HC9S08的硬件结构
每个HCS08 系列的MCU 都是由HCS08 核加上几个存储器以及外设模块组成。HCS08 核主要包括:
①HCS08 CPU
②背景调试控制器(BDC)
③支持多达32个中断/复位源
④芯片级地址译码
HCS08CPU包括和M68HC08相同的寄存器。其中包括一个8位累加器(A),一个可分别存取高8位和低8位的16位变址寄存器(HX),一个16位栈指针(SP),一个16 位程序计数器(PC)和一个状态码寄存器(CCR),该CCR 包含5个处理器状态标志(V,H,N,Z 和C)和全局中断屏蔽标志(I)。HCS08核定义的5个主要的存储空间。
直接页寄存器主要包括I/O 端口寄存器和大部分的外设控制和状态寄存器;RAM区的地址紧接在直接页寄存器地址的后面并且向高地址延伸,堆栈空间就落在RAM中。一般将堆栈的栈顶初始化在RAM的高地址部分。和大部分的处理器一样,HCS08的堆栈增长方向是向下的。高地址页寄存器位于$1800到$182B之间,由于这些寄存器比直接页寄存器的使用频率要少的多,所以它们没有安排在珍贵的直接页地址空间中;FLASH存储器分配64K字节的存储空间最终分配到地址$FFFF。这一块的起始地址取决于MCU有多少FLASH存储空间;向量区是FLASH区的一部分,位于$FFC0-$FFFF中,但是它是单独解码的,所以当中断向量取出时别的HCS08模块可以识别出来。