3 Micro C/OS—II的移植
Micro C/OS—II移植到Atmega128上,需要修改OS_CPU.H,OS_CPU_A.S和OS_CPU_C.C三个与其相关的文件。其中OS—CPU.H主要完成的是数据类型、堆栈单位、堆栈增长方向的定义。相关的数据类型定义:
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U; //无符号8位数
typedef signed char INT8S; //带符号8位数
typedef unsigned int INTI6U; //无符号l6位数
typedef signed int INTl6S; //带符号l6位数
typedef unsigned long INT32U; //无符号32位数
typedef signed long INT32S; //带符号32位数
typedef float FP32; //单精度浮点数
堆栈单位的定义:
typedef unsigned char OS_STK;//堆栈入口宽度为8位
状态寄存器的定义:
typedef unsigned char OS_ CPU_SR;//定义状态寄存器为8位
堆栈增长方向的定义:
#define OS_STK_GROW TH 1;//AVR堆栈由高地址向低地址增长
0S_CPU_C.C 文件主要包括任务堆栈初始化和实现操作系统规定的几个Hook函数。其中移植需要的Hook函数如下:
OSTaskCreateHook();OSTaskDelHook()
OSTaskldleHook();OSTaskStateHook()
OSTaskSwHook();oSTCBInitHook()
OSTimeTickHook()
移植所需的OS— CPU-A.s中的函数有:
OS_CPU_SR_SAVE();OS_CPU_SR_RESTORE()
OSStartHightRdy();OSCtxSw0
OSIntCtxSw();OSTicklSR0
应用移植后的嵌入式操作系统对控制器进行验证,选取PB0~PB7作为输入,PD0~PD7作为输出,实现了二极管的发光演示。
部分源代码如下:
static void LED_Toggle(INT8U led)
{
#if OS_CRITICAL_M ETHOD = = 3
//Allocate storage for CPU status register
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAI ():
switck(1ed)
{casc 1:PORTD⌒=0x01;break;
case 2:PORTD⌒= 0x02;break;
case 3:PORTD⌒= 0x04;break;
case 4:PORTD⌒= 0x08;break;
}
OS_EXIT_CRITICAl ();
}
4 结语
应用Atmega128设计的嵌入式控制器能完成多功能数据采集与控制,CAN总线和RS232通信,移植的嵌入式实时操作系统可增强实时多任务信息处理的能力。并通过实验对本设计进行了验证。
3 Micro C/OS—II的移植
Micro C/OS—II移植到Atmega128上,需要修改OS_CPU.H,OS_CPU_A.S和OS_CPU_C.C三个与其相关的文件。其中OS—CPU.H主要完成的是数据类型、堆栈单位、堆栈增长方向的定义。相关的数据类型定义:
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U; //无符号8位数
typedef signed char INT8S; //带符号8位数
typedef unsigned int INTI6U; //无符号l6位数
typedef signed int INTl6S; //带符号l6位数
typedef unsigned long INT32U; //无符号32位数
typedef signed long INT32S; //带符号32位数
typedef float FP32; //单精度浮点数
堆栈单位的定义:
typedef unsigned char OS_STK;//堆栈入口宽度为8位
状态寄存器的定义:
typedef unsigned char OS_ CPU_SR;//定义状态寄存器为8位
堆栈增长方向的定义:
#define OS_STK_GROW TH 1;//AVR堆栈由高地址向低地址增长
0S_CPU_C.C 文件主要包括任务堆栈初始化和实现操作系统规定的几个Hook函数。其中移植需要的Hook函数如下:
OSTaskCreateHook();OSTaskDelHook()
OSTaskldleHook();OSTaskStateHook()
OSTaskSwHook();oSTCBInitHook()
OSTimeTickHook()
移植所需的OS— CPU-A.s中的函数有:
OS_CPU_SR_SAVE();OS_CPU_SR_RESTORE()
OSStartHightRdy();OSCtxSw0
OSIntCtxSw();OSTicklSR0
应用移植后的嵌入式操作系统对控制器进行验证,选取PB0~PB7作为输入,PD0~PD7作为输出,实现了二极管的发光演示。
部分源代码如下:
static void LED_Toggle(INT8U led)
{
#if OS_CRITICAL_M ETHOD = = 3
//Allocate storage for CPU status register
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAI ():
switck(1ed)
{casc 1:PORTD⌒=0x01;break;
case 2:PORTD⌒= 0x02;break;
case 3:PORTD⌒= 0x04;break;
case 4:PORTD⌒= 0x08;break;
}
OS_EXIT_CRITICAl ();
}
4 结语
应用Atmega128设计的嵌入式控制器能完成多功能数据采集与控制,CAN总线和RS232通信,移植的嵌入式实时操作系统可增强实时多任务信息处理的能力。并通过实验对本设计进行了验证。
举报