位置:51电子网 » 技术资料 » 其它综合

在MC68HC908GP32上移植μC/OS-II

发布时间:2007/8/28 0:00:00 访问次数:971

在前几讲中,介绍了μ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*/

在前几讲中,介绍了μ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*/

-->
相关IC型号

热门点击

 

推荐技术资料

罗盘误差及补偿
    造成罗盘误差的主要因素有传感器误差、其他磁材料干扰等。... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!