uCOS-II 在单片 STC89 系列单片机上的移植实现.doc

上传人:yyf 文档编号:11032501 上传时间:2021-06-18 格式:DOC 页数:4 大小:99.50KB
返回 下载 相关 举报
uCOS-II 在单片 STC89 系列单片机上的移植实现.doc_第1页
第1页 / 共4页
uCOS-II 在单片 STC89 系列单片机上的移植实现.doc_第2页
第2页 / 共4页
uCOS-II 在单片 STC89 系列单片机上的移植实现.doc_第3页
第3页 / 共4页
uCOS-II 在单片 STC89 系列单片机上的移植实现.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《uCOS-II 在单片 STC89 系列单片机上的移植实现.doc》由会员分享,可在线阅读,更多相关《uCOS-II 在单片 STC89 系列单片机上的移植实现.doc(4页珍藏版)》请在三一文库上搜索。

1、精品论文uC/OS-II 在单片 STC89 系列单片机上的移植实现刘伟伟,魏同宇,孙卫兵 中国矿业大学(徐州)信电学院,江苏徐州(221008) E-mail: 摘要:嵌入式操作系统应用广泛,其中的 uC/OS-II 嵌入式实时操作系统以高可靠性、稳定性和实时性占有着一定的嵌入式系统市场。本文首先介绍了 uC/OS-II 和 STC89 系列单片 机的特点,并对 keil C51 编译器环境下的特殊问题进行了阐述;其次,叙述了 uC/OS-II 嵌入式实时操作系统移植的全过程。最后,建立了两个任务,并在 keil C51 的小模式下将其移植到单片 STC89 系列单片机上。 关键词:uC/O

2、S-II;STC89;移植1.引言嵌入式操作系统近年来备受人们的关注,其开发出来的产品(小到 mp3、手机等数字化 产品,大到电冰箱,洗衣机,汽车等电子设备)应用到生活的各个角落。uC/OS-II 作为嵌 入式操作系统的一种,它以高可靠性、稳定性和实时性占有着一定的嵌入式系统市场。由于 其结构简洁,可剪裁,移植性强,源代码开放,故非常适合初次接触嵌入式实时操作系统的 人员进行学习。STC89 系列单片机加密性强,低功耗,超低价,高速,高可靠,强抗静电, 强抗干扰等特点,占有 51 系列单片机一定的市场。因此,本文将通过详细介绍 uC/OS-II 在 STC89C58RD+单片机的移植过程,帮助

3、初学者更快地进入嵌入式的学习。2.uC/OS-II 和 STC89C58RD+的特点uC/OS-II 实时操作系统使用可剥夺型内核,CPU 总是运行多个任务中优先级别最高的 任务,使得任务级响应时间得以最优化。它提供如信号量、消息邮箱和消息队列以及动态分 配和释放内存的功能。其函数的调用和服务的执行时间是可以确定的。uC/OS-II 可管理 64 个任务,其中 4 个最高优先级和 4 个最低优先级任务供自身使用,其余 56 个任务供用户使 用。源代码的可剪裁性使得用户可根据自己的需求将不用的功能裁剪掉。STC89C58 RD+是 8 位单片机,工作时钟频率在 080MHz,四个 8 位并行端口

4、,内置看 门狗,3 个定时器/计数器,双数据指针,8 个中断源,四级中断,ISP 技术写入程序。Flash 程序存储器容量为 32K,RAM 数据存储器 1280 字节,8K 的 E2PROM。超强抗干扰:1.高抗静电(ESD 保护);2.轻松过 2KV/4KV 快速脉冲干扰(EFT 测试);3.宽电压,不怕电源抖动;4.宽温度范围,-40C85C。 超低功耗:1.掉电模式:0.1;2.正常工作模式 4mA-7mA;3.掉电模式可由外部中断唤醒1。3.移植过程要将 uC/OS-II 进行移植,首先处理器需满足:处理器的 C 编译器能产生可重入代码; 用 C 语言就可以打开和关闭中断;处理器支持

5、中断,并且能产生定时中断(通常在 10 至 100Hz 之间);处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈;处理器有将堆栈指针 和其它 CPU 寄存器读出和存储到堆栈或内存中的指令2。uC/OS-II 内核分为与处理器无关的代码、与处理器相关的代码和应用相关的代码三部 分。移植过程主要放在与处理器相关的代码上:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。- 1 -由于本次移植是在 keil C51 小模式(小模式下运行速度比大模式运行速度快很多,有利于提高系统的工作速度,适用于较小的程序)下进行,将不用的功能剪裁掉,因此修改 OS_CFG.H和 STARTU

6、P.ASM 也是其关键部分。3.1 函数参数的修改keil C51 编译器默认情况下代码不可重入,而在多任务操作系统环境中,各个任务并发 运行导致重入,所以要在所有的 C 函数及其声明后面加上 reentrant,例如:voidXXXreentrant/其中 XXX 为函数名uC/OS-II 系统中用作形参的“pdata”和“data”,在 keil C51 中是关键字,编译时会出现错 误。因此,可将 uC/OS-II 系统中的“pdata”,“data”修改成“ppdata”,“ddata”。 keil C51 尽量 使用指定存储类型的指针(memory_specific pointer)不

7、使用一般指针(generic pointer),外部变 量声明为 xdata 类型,指向外部变量的指针改为 xdata 数据类型的指针,指向函数的指针改 为 code 数据类型的指针。3.2 OS_CPU.H 的修改中断设置。STC 单片机中 EA 为中断允许总控位,EA=0 表示关所有中断,EA=1 表示 开所有中断。因此,此处定义:#defineOS_ENTER_CRITICAL( )EA = 0#defineOS_EXIT_CRITICAL( )EA = 1堆栈生长方向的设置。微处理器和微控制器的堆栈生长方向有两种,OS_STK_GROWTH 为 0 表示堆栈从下往上长,OS_STK_G

8、ROWTH 为 1 表示堆栈从上往下长。STC 单片机堆栈 是从下往上增长,故定义:#defineOS_STK_GROWTH0由于 STC 系列单片机没有软中断,定义:#defineOS_TASK_SW()OSCtxSw( )实践表明,用子程序调用入栈,用中断返回指令 RETI 出栈是没有问题的。在没有中断 发生的情况下复位中断系统也不会影响系统正常运行3。堆栈长度的定义。本次移植重在掌握移植过程,所建任务非常简短,若堆栈长度设置过 大,必会导致单片 STC89C58 RD+SRAM 空间的浪费和不足,此处设置:#define CPU_MAX_STK_SIZE0x5A3.3 OS_CPU_C.

9、C 的修改此文件中包含六个 C 函数:OSTaskStkInit( ),OSTaskCreateHook( ),OSTaskDelHook( ), OSTaskSwHook( ),OSTaskStatHook( ),OSTimeTickHook( )。只需修改任务堆栈初始化函数 OSTaskStkInit( ),其它函数是对系统内核扩展时用的,必须声明但没必要包含代码。用户堆 栈初始化时从下向上依次保存:用户堆栈长度(15 字节),PCL,PCH,PSW,ACC,B,DPL, DPH,R0,R1,R2,R3,R4,R5,R6,R7。不用保存 SP,任务切换时根据用户堆栈长度 计算得出。3.4

10、OS_CPU_A.ASM这里需要改写四个汇编语言函数:OSStartHighRdy( ) ,OSCtxSw( ),OSIntCtxSw( ),OSTickISR( )。- 4 -OSStartHighRdy( )功能为使就绪态任务中优先级最高的任务开始运行,即获取当前就绪的最高优先级任务的堆栈指针。OSCtxSw( )功能为完成任务级切换。先保存当前任务堆栈的内容,然后恢复最高优先级 任务的系统堆栈。OSIntCtxSw( )功能为完成中断级切换,该函数由 OSIntExit( )调用。在调用函数 OSIntCtxSw( )之前,已经保存了被终止运行程序相关寄存器的值到中断的任务堆栈中,此处

11、只需恢复待运行任务的系统堆栈。OSTickISR( )功能是为系统提供一个时钟源,实现时间的延迟和超时功能。3.5 OS_CFG.H此次移植是在单片 STC89C58RD+上进行,因此,将不使用的信号量、消息邮箱和消息 队列等函数的功能屏蔽掉,即:#defineXXXXX0/ 其中 XXXXX 表示不用的常量 将最大任务数定义为 2,满足本次移植的要求。即:#define OS_MAX_EVENTS2修改系统时钟节拍#define OS_TICKS_PER_SEC203.6 STARTUP.A51IDATALEN 修改。采用 small 模式编译,IDATALEN 默认值为 80H,根据 ST

12、C89C58RD+ SRAM 大小,将其设成:IDATALENEQU100HIBPSTACK、IBPSTACKTOP 设置。定义在 small 编译模式下创建的再入函数的模拟栈 区。IBPSTACK 变量设置成 1(默认值为 0)时才能创建模拟堆栈并对(变量?C_IBP)进 行初始化,可不做初始化4。IBPSTACKEQU1IBPSTACKTOPEQU0FFH+14.任务建立及移植实现建立简单的两个任务 Task1 和 Task2。代码如下: OS_STK xdata Task1StackCPU_MAX_STK_SIZE; OS_STK xdata Task2StackCPU_MAX_STK_

13、SIZE; void Task1(void xdata * ppdata) reentrantppdata = ppdata;while(1) P0=0x00;OSTimeDlyHMSM(0, 0, 1, 0);void Task2(void xdata * ppdata) reentrantppdata = ppdata;while(1)P0=0xFF; OSTimeDlyHMSM(0, 0, 3, 0);main()OSInit();OSTaskCreate(Task1, (void xdata *)0, &Task1Stack0,2); OSTaskCreate(Task2, (void

14、 xdata *)0, &Task2Stack0,3); OSStart();此处两个任务是让 P0 口的 LED 灯先亮 3s,然后灭 1s。编译通过,代码大小未超过STC89C58RD+ RAM 的容量。将程序烧入,实验成功。5.结束语本文实现了 uC/OS-II 嵌入式实时操作系统的移植。在 keil C51 小模式下移植到单片 STC89C58RD+时,关键要看其 RAM 的容量是否足够。为实验移植过程,将任务最简单化。 若想实现其它功能,只需创建一个任务,在任务中添加要实现其功能的代码即可。参考文献1 STC89C51RC/RD+ 系列单片机器件手册S. 宏晶科技2 Jean J.L

15、abrosse 著. 嵌入式实时操作系统 uC/OS-IIM. 邵贝贝译. 北京航空航天大学出版社, 20033 赵建华,汪文勇. uC/OS-II 内核在 80C51 系列单片机上的移植J. 计算机工程与技术,2007,28(9)4 求是科技. 8051 系列单片机 C 程序设计完全手册M. 人民邮电出版社, 2006The porting of uC / OS-II to STC89-family microprocessorsLiu Weiwei, Wei Tongyu, Sun WeibingSchool of Information and Electrical Engineerin

16、g CUMT, Jiangsu, Xuzhou(221008)AbstractThe Embedded Operating System is widely used, in which the Embedded Real Time Operating SystemuC / OS-II with high reliability, stability and the ability of real-time occupies the certain embedded system markets. Firstly, the features of The Embedded Real Time

17、Operating System uC / OS-II and the STC89 family microprocessors is introduced in this paper, and the difference about the porting to the compiler of keil C51 is elaborated; Secondly, the porting process of uC / OS-II is described; Finally, the two tasks is created, and the Embedded Real Time Operating System uC / OS-II is ported to the STC89 family microprocessors in keil C51 small mode.Keywords: uC/OS-II; STC89; port作者简介:刘伟伟,男,1986 年生,硕士研究生,主要研究方向是嵌入式系统设计; 魏同宇,男,1982 年生,硕士研究生,主要研究方向是电网谐波检测与治理。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1