您的位置 首页 新能源

在MC68HC908GP32上移植μC/OS-II

在前几讲中,介绍了μC/OS-II 的概念、工作机制,还介绍了μC/OS-II在Intel 80X86CPU上的移植,相信读者通信学习,已经对移植的过程和步骤有了一定的了

在前几讲中,介绍了μC/OS-II 的概念、作业机制,还介绍了μC/OS-II在Intel 80X86CPU上的移植,信任读者通讯学习,现已对移植的进程和进程有了必定的了解。ΜC/OS-II开端是为摩托罗拉68HC11系列单片机规划的。 68HC11系列单片机有外部总线,能够外接RAM和ROM;而没有外部总线8位MCU。因为RAM容量的约束,移植就存在必定的困难;但关于有些8位的 MCU,将μC/OS-II移植到MOTOROLA MC68H908GP32(以下简称GP32)上。

一、在GP32上移植μC/OS-11的首要问题

在第(4)讲中,介绍过要移植μC/OS-11,方针处理有必要满意以下要求:

(1)处理器的C编译器能发生可重入代码;

(2)用C言语就能够翻开和封闭中止;

(3)处理器支撑中止,并且能发生守时中止(通常在10~100Hz之间);

(4)处理器支撑满意的RAM,保存全局变量和作为多使命环境下的使命仓库。

(5)处理器有将仓库指针和其他CPU寄存器读出和存储到仓库或内存中的指令。

编译后的μC/OS-II的内核大约有6~10KB;假如只保存最中心的代码,则最小可压缩到2KB。RAM的占用与体系中的使命数有关,使命仓库要占用很多的RAM空间,仓库的巨细取决于使命的局部变量、缓冲区巨细及或许的中止嵌套的层数。所以,所要移植的体系中有必要有满意的RAM资源。而像MOTOROLA6805系列的8位MCU,因为RAM资源太小且仓库指针是固定的,不能满意上面的第(4)条和第(5)条要求,所以μC/OS-II不能在这类处理器上运转。

GP32是68HC08家庭的成员,具有512字节的片内RAM,32K字节的片内Flash,8MHz总线时钟。内部寄存器包含1个8位累加器A,1个16位索引寄存器X,1个16位仓库指针寄存器SP,1个16位程序指针寄存器 PC及1个8位标志寄存器CCR。与6805系列MCU比较,68HC08系列MCU的仓库指针为16位,能够自在寻址。这就满意了移植条件(5),且能够运用C编译器生成代码。GP32的用户手册能够在摩托罗拉公司的主页上下载,http://www.motorola.com。

在GP32上移植μC/OS-II的首要困难仍是RAM资源太少。为了移植成功,有必要采纳办法削减RAM的用量,包含约束体系中的使命数量、细心修正μC/OS-II内核、去掉不运用的部分、约束使命的断嵌套层数、在使命中尽量削减运用局部变量等等。在采纳了上述办法后,可将RAM用量削减到最低。但需求提示的是,为了节约仓库空间而选用的约束中止嵌套层数的办法将影响体系的实时功用。所以,在GP32上移植μC/OS-II更多的是一种演示,能更好地阐明μC/OS-II内核的可裁剪性和灵活性。

在本讲中将介绍一个移植实例。为了削减RAM用量,在本例中只运转了2个用户使命。尽量减池一内核中不必要的模块(包含由箱、音讯行列、内存办理等),去掉了使命挂起、唤醒和删去等扩展功用,但仍然支撑使命的创立和办理,也保存了信号量模块来用来使命间的通讯。

二、东西和运转环境

要完成μC/OS-II向GP32的移植,需求一个面向MC68HC08的C编译器。笔者运用的是HIWARE公司的C编译器。移植进程相同适用于MC68HC08家庭的其他成员。

三、移植中所需修正的文件

首先是编写整个项目的公共头文件include.h,这个文件界说运用内核中的哪些模块。Include.h会被一切的C源程序引证。还要修正和CPU相关的三个文件,分别是头文件OS_CPU08.H、汇编代码文件 OS_CPU08.ASM和C代码文件OS_CPU08.C。

1.include.h文件

include.h是主头文件,在一切后缀名为.C的文件的开端都包含include.h文件。文件中能够内核进行裁剪。在本例中界说如下:

#define OS_MAX_EVENTS 2 /*共用了2个信号量*/

#define OS_MAX_MEM_PART 0 /*不运用内存块功用*/

#define OS_MAX_QS 0 /*不运用音讯行列功用*/

#define OS_MAX_TASKS 3 /*共有3个使命(包含闲暇使命)*/

#define OS_LOWEST_PRIO 20 /*界说最低优先级20*/

#define OS_TASK_IDLE_STK_SIZE 60 /*界说闲暇使命仓库60字节*/

#define OS_TASK_STAT_EN 0 /*不运用计算使命*/

#define OS_MBOX_EN 0 /*不运用音讯邮箱功用*/

#define OS_MEM_EN 0 /*不包含内存办理部分代码*/

#define OS_Q_EN 0 /*不包含音讯行列部分代码*/

#define OS_SEM_EN 1 /*界说包含信息量相关代码*/

#define OS_TASK_CHANGE_PRIO_EN 0 /*不包含使命优先级动态改动代码*/

#define OS_TASK_CREATE_EN1 /*包含使命创立函数代码*/

#define OS_TASK_CREATE_EXT_EN 0 /*不包含带扩展功用的使命创立函数*/

#define OS_TASK_DEL_EN 0 /*不包含删去使命函数代码*/

#define OS_TASK_SUSPEND_EN 0 /*不包含使命挂起和唤醒函数代码*/

#define OS_TICKS_PER_SEC 10 /*界说每秒的时钟节拍数*/

关于不同类型的处理器,还需求改写include.h文件,添加自己的头文件,但有必要加在文件结尾。在装置μC/OS-II的时分,附带了几个移植实例,例如,针对Intel 80X86的代码装置到IIL目录下。咱们为GP32编写的移植实例可放在IIHC08下,这样,为GP32改写的include.h文件中应该参加下列句子:

#include iiHC08_CPU08.ASM

#include iiHC08_CPU08.C

#include iiHC08_CPU08.H

2.OS_CPU08.H文件

OS_CPU08.H文件中界说了硬件相关的基本信息:

/*数据类型*/

typedef unsigned char BOOLEAN;

typedef unsigned char INT8U;

typedef signed char INT8S;

typedef unsigned short INT16U;

typedef signed short INT16S;

typedef unsigned long INT32U;

typedef signed long INT32S;

/*界说仓库增加方向*/

#define OS_STK_GROWTH1 /*仓库由高地址向低地址增加*/

/*界说仓库单位*/

#define OS_STK INT8U

/*界说进入临界代码区开关中止宏*/

#define OS_ENTER_CRITICAL() asm sei

#define OS_EXIT_CRITICAL() asm cli

#define OS_TASK_SW() asm swi

(1)数据类型

因为不同的处理器有不同的字长,μC/OS-II的移植需求从头界说一系列的数据结构。详细字长还和运用的C编译器有关。在GP32中仓库是按字节操作的,仓库数据类型OS_STK声明为8位。μC/OS-II中一切使命的仓库都有必要用OS_STK声明。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/299436.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部