现在嵌入式体系正在不断地向智能化、网络化的方向开展,在实时操控体系中选用嵌入式操作体系已成为当时嵌入式运用体系中的一个开展方向。
本文以开发电能计量电表中运用C/OS-II为实例,介绍了将实时嵌入式操作体系C/OS-II移植到方针体系中的办法,剖析和研讨了在单片机体系中运用嵌入式操作体系的有关问题。
1 导言
跟着后PC年代和网络以及通讯技能年代的到来,嵌入式操作体系在通讯、电子、自动化等范畴受现已到了越来越多的重视。因为一个好的嵌入式实时操作体系可以进步产品的研发功率,缩短产品的开发周期,所以许多生产厂家正在纷繁考虑选用嵌入式操作体系技能来开发自己的产品。
实时嵌入式操作体系的品种繁复,大体可分为两种——商用型及免费型。商用型的实时操作体系功用安稳、牢靠、有完善技能支撑及售后服务,但其贵重价格约束了它在为数众多的低端低成本的场合的运用。而且对这些场合来讲,一个包括网络协议核、文件办理,内存办理的操作体系真实显得过于巨大了。它们需求的仅仅是一个安稳的包括使命办理及进程调度的实时内核,对一个 8位或16位单片机的运用场合,一个代码长度不超越10KB,占用体系资源不超越10%象mC/OS-II这样的实时内核是十分合适的。
2 mC/OS-II 体系简介
mC/OS-II 是由Labrose先生编写的开放式内核,具有源码揭露,可移植、可固化、可裁剪,安稳性及牢靠性高的特色。其内核供给使命调度与办理、时间办理使命同步与通讯、内存办理及中止服务等功用,支撑64用户服务。90%的代码函数用规范的ANSI C言语书写,程序可读性强、移植性好。合适于小型操控体系,具有履行功率高,占用空间小,实时功用优秀,可扩展性强的特色,加之它安稳、牢靠,现已被广泛运用在航空、医疗器械、工业操控等范畴,被证明是一个老练安稳的实时内核。
3 在AT89C51上作业mC/OS-II
要运用mC/OS-II,首要就有必要把这个内核成功地移植到运用的CPU上去。下面就给出在电能计量电表所用的AT89C51上移植mC/OS-II进程。mC/OS-II移植的软件部分要完结以下作业。
3.1 与编译器有关的代码
在不同的处理器中有不同的字长,所以有必要界说一系列数据类型以保证移植的正确性。在C/OS-II中,不运用C的char、int和long等数据类型,这些都是和编译器相关的,在AT89C51处理器中,各种数据类型界说如下:
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U;
typedef signed char INT8S;
typedef unsigned int INT16U;
typedf signed int INT16S;
typedef unsigned long INT32U;
typedef signed long INT32S;
typedef float FP32;
typedef double FP64;
typedef unsigned char OS_STK;
mC/OS-II需求先制止中止拜访代码的临界区,而且在拜访结束后从头答应中止。mC/OS-II界说了两个宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来制止和答应中止。完结办法如下:
#define OS_ENTER_CRITICAL() EA = 0
#define OS_EXIT_CRITICAL() EA = 1
#define OS_STK_GROWTH 0
#define OS_TASK_SWO 0SCtxSW()
3.2 4个汇编言语函数
这部分需求对处理器的寄存器进行操作,所以有必要用汇编言语来编写。 mC/OS-II的移植要求用户编写4个简略的汇编言语函数:OSStarHighRdy(),OSCtxSw(),OSIntCtxSw(),OSTickISR()。
OSStarHighRdy()在多使命体系启动函数OSStar()中调用。主要功用是将安排妥当表中最高优先级使命的栈指针加载到SP中,并强制中止回来。这样安排妥当的最高优先级使命就好像从中止处理回来到作业态相同,使得整个体系得以作业。
OSCtxSw()在使命级使命切换函数中调用。使命级的切换问题是经过发软中止指令或依托处理器履行圈套指令来完结的。因为AT89C51没有软中止指令或依托处理器履行圈套指令,所以用OS_TASK_SW()直接调用OSCtxSw()来完结。
OSIntCtxSw()经过调用OSIntCtxSw()来从ISR中履行切换功用。具体完结使命是调整仓库指针,保存当时使命的SP,载入安排妥当最高优先级使命的SP,康复安排妥当最高优先级使命的环境变量,中止回来,然后完结中止级使命切换。
OSTickISR()是体系时钟节拍中止服务函数。这是一个周期性中止,为内核供给时钟节拍,频率越高体系负荷越重。此外还要编写6个与操作体系有关的函数,有关这些函数具体功用更具体的论述,请参考文献[1][2]。做完以上作业后,mC/OS-II就可以作业了。