本文首要介绍了实时内核μCOS-II和微处理器ATmega128的特色,论说了在此基础上进行移植,编写API函数,树立自己的RTOS,和用这些API函数树立嵌入式运用体系的办法和进程。最终总结了运用这一嵌入式运用体系开发便携式医疗设备的长处。
引 言
本文介绍μC/OS-Ⅱ移植到ATMEL公司的8位微操控器ATmega128上的进程。所谓移植,便是使一个实时内核能够在某个微处理器上运转,并在此基础上进行驱动程序开发,使之成为一个有用的嵌入式体系。嵌入式体系包含了硬件和软件两部分,因为体系硬件资源的约束和实践运用的要求,运用体系对软件的基本要求是体积小,履行速度快,具有较好的削减性和可移植性。
嵌入式体系的软件一般由嵌入式操作体系和运用软件组成,经过在操作体系之上开发运用软件,能够屏蔽掉许多底层硬件细节,使得运用程序调试便利,移植简略,易维护,一起开发周期也短。大都实时操作体系为用户供给一些规范的API函数,程序开发人员能够运用这些API函数进行运用程序开发。可是现在商用型的实时操作体系价格十分贵重,而免费型的实时操作体系μCOS-II作为一个源代码揭露的实时内核已经有了10余年运用实践,许多职业都有成功运用该内核的实例。但因为μCOS-II仅仅一个实时内核,它没有像商用型实时操作体系那样供给API函数接口,有许多作业需求用户去完结,还需求依据实践运用需求进行功用扩展,包含底层的硬件驱动、文件体系、用户图形接口等程序的编写。
μC/OS-II嵌入式实时操作体系简介
μC/OS-II是闻名的、源码揭露的实时内核,可用于各类8位、16 位、32位单片机或DSP。μC/OS-II是一个完好、可移植、可固化、可削减的占先式实时多使命内核。它用ANSIC言语编写,包含小部分与硬件有关的汇编代码,使之便于移植,能够在不同架构的微处理器上运用。到目前为止,该内核已有10多年的运用史,在医疗、网络、通讯等许多范畴得到了广泛运用。μC/OS-II内核能够分为几个独立的部分,分别是使命办理、时间办理、使命间通讯、内存办理几个独立的部分,他的许多功用都是可装备的,这样能够依据运用的需求对操作体系进行削减。μC/OS-II是占先式实时内核,他总是运转在安排妥当条件下优先级最高的使命,μC/OS-II一共能够办理64个使命,赋予每个使命的优先级有必要是不同的,每个使命都有自己独立的仓库,能够压低用户程序对内存的需求。悉数μC/OS-II的函数调用与服务履行时间具有可确定性,它的体系服务的履行时间不依赖于运用程序使命的多少。μC/OS-II中的使命能够是一个无限的循环,也能够在履行完一次后被删除去,使命在休眠、安排妥当、运转、等候和挂起等几个状况之间进行转化。μC/OS-II要求用户供给守时中止来完结延时和超时操控等功用,这个守时中止称为时钟节拍,他的实践频率由用户的运用程序决议,一般为10~100Hz 。节拍频率越高,体系的负荷越重。μC/OS-II中有三种用于数据同享和使命通讯的办法:信号量、邮箱和音讯行列。一个使命或许中止服务子程序能够经过事情操控块向别的的使命发信号;一个使命能够等候另一个使命或中止服务子程序给它发送信号;或许是多个使命等候同一个信号的发生,在这种情况下,优先级最高的使命将得到这一信号并进入安排妥当状况预备履行。
ATmega128微处理器的硬件特色
ATmega128的MCU包含一个算术逻辑单元(ALU) ,一个状况寄存器(SREG) ,一个通用作业寄存器组和一个仓库指针。状况寄存器(SREG) 的最高位I是大局中止答应位。假如大局中止答应位为零,则一切中止都被制止。当体系呼应一个中止后,I位将由硬件主动清“0”;当履行中止回来(RETI) 指令时,I位由硬件主动置“1”,然后答应体系再次呼应下一个中止请求。通用作业寄存器组是由32个8位的通用作业寄存器组成。其间R26~R31这6 个寄存器还能够两两合并为3 个16位的直接地址寄存器,这些寄存器能够用来对数据存储空间和程序存储空间进行直接寻址的寄存器。仓库指针(SP) 是一个指示仓库顶部地址的16 位寄存器。ATmega128单片机的硬件仓库的成长方向是向下的(从高地址向低地址成长) ,所以软件仓库在界说的时分,也要采纳相同的成长方向。ATmega128单片机的数据存储器是线形的,从低地址到高地址依次是CPU寄存器区(32个通用寄存器) ,I/O寄存器区,数据存储区。
ATmega128的中止呼应机制
ATmega128有34个不同的中止源,每个中止源和体系复位在程序存储空间都有一个独立的中止向量(中止进口地址) 。每个中止源都有各自独立的中止答应操控位,当某个中止源的中止答应操控位为“1”且大局中止答应位I也为“1”时,体系才呼应该中止。当体系呼应一个中止请求后,会主动将大局中止答应位I清零,此刻,后续中止呼应被屏蔽。当体系履行中止回来指令RETI时,会将大局中止答应位I置“1”,以答应呼应下一个中止。若用户想完结中止嵌套,有必要在中止服务子程序中将大局中止答应位I置“1”。在中止向量表中,处于低地址的中止具有高的优先级。优先级高仅仅标明在多个中止一起发生的时分,体系先呼应优先级高的中止,并不含有高优先级的中止能打断低优先级的中止处理作业的意思。因为μC/OS-Ⅱ的使命切换实践上是模仿一次中止,因而需求知道CPU的中止呼应机制。中止发生时,ATmega128按以下进程次序履行:
(1) 大局中止答应位I清零。
(2) 将指向下一条指令的PC值压入仓库,一起仓库指针SP减2。
(3) 挑选最高优先级的中止向量装入PC,程序从此地址持续履行中止处理。
(4) 当履行中止处理时,中止源的中止答应操控位清零。中止完毕后,履行RETI指令,此刻:
①大局中止答应位I置“1”。
② PC从仓库推出,程序从被中止的当地持续履行。特别要注意的是:ATmega128A单片机在呼应中止及从中止回来时,并不会对状况寄存器SREG 和通用寄存器主动进行保存和康复操作,因而,对状况寄存器SREG 和通用寄存器的中止维护作业有必要由用户来完结。
ATmega128的守时器中止
ATmega128有三个守时器:T0,T1,T2,能够为μCOS-II供给准确的时钟源。ATmega128的三个守时器都有计数溢出中止功用,并且T1和T2还有匹配比较中止,即守时器计数到设定的值时,发生中止并主动清零。若体系选用这种中止方法,其优点是在中止服务程序ISR中不需求从头装载守时器的值。