跟着微电子技术和网络的开展,人们对网络的知道日益深化。网络终端产品也越来越遭到人们的重视,嵌入式操作体系的使用也得到了史无前例的开展,人们对嵌入式的研讨也有了长足的前进。依据某个操作体系的实时、多使命体系的规划合使用成为单片机使用的新的开展趋势。
μC/OS-Ⅱ是一个源码揭露的实时嵌入式操作体系,它的特色在于揭露的源代码,很强的移植性,占先式多使命,每个使命有独自的栈,中止办理及很强的稳定性与可靠性等,现在越来越遭到实时嵌入式体系规划者的重视,本文具体叙述了怎么把uC/OS-II 操作体系移植到M16C62 单片机中,并给出了以M16C62 单片机为中心处理器构成的一个实时多使命体系的规划方案。
1、uC/OS-II的移植
uC/OS-II选用彻底占先式的实时内核,最多能够办理56个使命,每个使命对应一个不同的优先级,因而,uC/OS-II操作体系并不支撑时刻片轮转调度法。可是悉数UC/OS-II的函数调用与服务的履行时刻是可知的,也便是,uC/OS-II体系服务的履行时刻不依赖于使用程序使命的多少。别的,uC/OS-II中每个使命都有自己独自的栈,每个栈的巨细能够依据使用程序的需求进行分配,这样压低了体系对RAM的需求;在中止办理方面,uC/OS-II中的中止能够使正在履行的使命挂起,假如优先级更高的使命被中止唤醒,则高优先级的使命在中止嵌套悉数退出后当即履行,uC/OS-II的中止嵌套可达255层。
uC/OS-II的源码大部分是用可移植性很强的ANSI C 写的。仅仅和微处理器有关的很小一部分代码是用汇编写的,这样把uC/OS-II移植到MC16C62中就变得相对简略许多,首要是要修正和处理器有关的代码,如:OS-CPU.H、OS-CPU-A.ASM、OS-CPU-C.C。
(1)、OS-CUP.H头文件
OS_CUP.H头文件首要是界说和处理器有关的数据类型,在M16C62中的数据类型包含无符号整型、有符号整型、无符号字符型、有符号字符型等。因而,OS_CPU.H头文件对这些类型进行全新的界说。除了和处理器有关的数据类型界说外,在OS-CUP.H中还作了有关中止制止、中止答应、仓库的增加方向等一些简略宏的界说。
(2)、OS-CPU-A.ASM文件
在OS-CPU-A.ASM文件中包含四个汇编语言的函数:OSSTartHighRdy()、OSCtxsw()、OSIntCtxsw()、OSTickISR()。在uC/OS-II中处于安排妥当态的使命的仓库结构,看起来和刚中止的景象是相同的。要想运转最高优先级使命,移植要做的是便是将一切处理器的寄存器按次序从使命仓库中康复出来,并且经过一条中止回来句子来完结使命的切换。因而,OSStartHighRdy()便是使要康复的使命仓库指针指到使命操控块的0偏址的内存单元中。也便是要把保存在使命仓库中的数据以及CPU寄存器,如R0、R1、R2、R3、A0、A1、SB和FB回来到体系其时的寄存器中,并把其时仓库指针指到PC指针的方位。
在uC/OS-II中使命的切换问题是经过发软件中止指令或依托处理器履行圈套指令来完结的。可是中止服务例程、圈套或反常处理例程的向量地址有必要指向OSCtxSw()。在M16C62单片机中能够经过界说软件中止0来完结使命的切换。因而,在M16C62中的中止向量表中的0号软件中止地址指向OSCtxSW()。对应的中止号为0。
OSInCtxSw()用来在ISR中履行切换功用。因为这个函数自身便是在中止中被调用,因而,在中止处理时寄存器的状况现已都被正确保存了。在OSInCtxSw()函数中要进行仓库整理作业,只要这样被中止的使命的仓库内容才干正确回来。
OSTIckISR()这个函数时UC/OS-II所要求的时钟基准,即时钟节拍,uC/OS-II的时钟节拍频率在10到100之间,一般为了核算便利而设为整数。在M16C62中有多个守时计数器能够挑选用来作为体系的时钟基准。在该体系中使用时钟守时器A0来产生频率为100的一个时钟节拍。OSTIckISR()是一个中止呼应函数,因而有必要在M16C62的中止向量表中,A0的中止向量应分配给OSTIckISR(),对应的中止向量号是21。
(3)、OS_CPU_C.C文件
在这个C文件中包含6个简略的C函数,而这6个函数中和移植联系最亲近的OSTaskInit()函数,这个函数是用来创立一个使命仓库。OSTaskCreat()和OSTaskExt()便是经过调用这个函数来初始化使命的仓库结构的,由此看来,OSTaskInit()是移植的要害。在前面的OS_CPU_A.ASM文件中,使命的切换是经过调用一个软中止0来完结使命切换,经过中止的回来指令使仓库中的数据回来到CPU寄存器,使最高优先级的使命占有CPU,因而,OSTaskInit()函数要做的便是模仿中止产生时处理器压栈的进程,把CPU的寄存器内容压到使命仓库中。在M16C62单片机中,体系分为两个仓库,即:用户仓库和中止仓库,而在uC/OS-II进行使命切换是经过软中止0来完结的,因而,uC/OS-II的使命仓库是M16C62中的中止仓库。在M16C62中,呼应中止后仓库的状况如图1所示:
图1 呼应中止后的仓库状况
中止仓库中顺次保存程序计数器PC和标志寄存器FLG中的内容,因而,在OSTaskStkInit()函数中便是要模仿这样的一个压栈进程。先压入FLAG的高四位和PC指针的高四位,接着压入FLAG低位、PC中心八位和PC的低八位。在保存完PC和FLAG位后就应该为CPU的寄存器FB、SB、A1、A0、R3、R2、R1和R0分配相应存储空间。OSTaskInit()函数回来的是使命仓库的指针。
2、多使命体系规划
多使命体系的规划是以M16C62单片机为CPU,以uC/OS-II为操作体系构成一个实时多使命体系,体系包含一个依据SPI总线的温度传感器(DS1722)、一个依据I2C总线的实时钟(X1226)、一个LCD(JM202A)和键盘。M16C62作业在微处理器方式,片外扩展一个32K×16位的RAM(Cy7c1021b)和由两片EEPROM(EEP29010-90)构成的存储器。多使命体系的规划首要包含:单片机资源分配和多使命规划两个方面。
(1)M16C62单片机资源分配
M16C62单片机是一个16位单片机,线性寻址空间是1M,但片内的RAM巨细只要3Kbyte,因而要使多使命体系能正常稳定地作业有必要合理分配资源。uC/OS-II中一切内核代码有必要在RAM区而把体系仓库区划块到3K RAM 区外。经过对Ncrt0.a30和Sect30.inc这两个M16C62配置文件,能够完结对单片机的资源区分。NC30编译器一开始就会编译Ncrt0.a30和Sect30.inc这两个文件,完结对CPU的初始化,和资源分配,首要包含:存储器空间、RAM区分配、中止向量分配、仓库区区分等。
(2)多使命规划
该体系中除了uC/OS-II的闲暇使命外,还包含实时钟使命、温度收集使命和键盘中止使命和数据存储使命。实时钟首要是能准确记载体系的日期,使命优先级为10,该使命处于一向作业状况;温度收集使命的优先级为20,首要是完结温度数据的收集;数据存储使命是在温度产生较大改变的时分记载其时的时刻和温度,使命优先级为30,在一般情况下这个使命是处在挂起状况,一旦温度变化超越预置规模,温度收集使命就会宣布一个有用信号量使处于挂起态的数据存储使命转为安排妥当态。键盘中止使命是经过M16C62的键盘中止来完结参数的设定,该使命以一个中止处理函数的方式来完结的。体系的程序流程图如图2所示。
图2 体系主程序流图
3、结束语
把uC/OS-II移植到M16C62单片机中,并以M16C62单片机为微处理器构成一个实时多使命体系,不只体系规划简练、硬件结构相对与51系列单片机来说也要简略,并且具有较强的抗干扰才能和体系稳定性。以M16C62为微处理器,以uC/OS-II为实时操作体系构成的多使命体系能广泛使用在小型实时多使命体系中,具有较好的使用远景。
责任编辑:gt