uC/OS-II在传统51单片机上的移植
一蜉蝣 2012-10-14 02:03:48 前段时间买了嵌入式实时操作系统uC/OS-II(第二版)这本书 认真的看了三周,因为之前没有学过操作系统的相关课程,刚开始的时候有点吃力,好在是坚持下来了,感觉学到了不少的东西。就想着自己也移植着试试看。之前学习51单片机的时候认真听课了。感觉51学的还可以,就试着往51上移植。国庆放假来后这一周的时间终于移植成功了。
或许不能说是成功了,因为没有真正的把生成的HEX文件下到单片机上运行。只是刚才调试的时候启动多任务成功。多任务切换成功。至于中断级的任务切换,没有调试。89C52只有256B的RAM,实在是少的可怜。也不想再试了。
把自己这几天调试的过程记录下来。
下面先把移植有关的源文件贴上来
OS_CPU.H
/*
*******************************************************************************
*
* 数据类型定义(与编译器有关,可查看编译器的帮助文档得到相应的数据类型)
*
*******************************************************************************
*/
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U; //8位无符号整数
typedef signed char INT8S; //8位有符号整数
typedef unsigned short int INT16U; //16位无符号整数
typedef signed short int INT16S; //16位有符号整数
typedef unsigned long int INT32U; //32位无符号整数
typedef signed long int INT32S; //32位有符号整数
typedef unsigned char OS_STK; //堆栈宽度定义为8位
typedef unsigned char OS_CPU_SR; //定义程序状态字位8位
/*
*******************************************************************************
*
* 与具体的处理器有关的代码
*
*******************************************************************************
*/
#define OS_CRITICAL_METHOD 1
#if OS_CRITICAL_METHOD==1
#define OS_ENTER_CRITICAL() EA=0
#define OS_EXIT_CRITICAL() EA=1
#endif
#if OS_CRITICAL_METHOD==2
#define OS_ENTER_CRITICAL(); \
#pragma asm \
PUSH PSW; \
CLR EA; \
#pragma endasm
#define OS_EXIT_CRITICAL() \
#pragma asm \
POP PSW \
#pragma endasm
#endif
#if OS_CRITICAL_METHOD==3
#define OS_ENTER_CRITICAL(); \
cpu_sr=PSW; \
EA=0;
#define OS_EXIT_CRITICAL() \
PSW=cpu_sr
#endif
#define OS_STK_GROWTH 0 //定义堆栈的增长方向,0表示向上增长
#define OS_TASK_SW() OSCtxSw() //任务切换