3 Micro C/OS—II的移植
Micro C/OS—II移植到Atmega128上,需要修改OS_CPU.H,OS_CPU_A.S和OS_CPU_C.C三個與其相關(guān)的文件。其中OS—CPU.H主要完成的是數(shù)據(jù)類型、堆棧單位、堆棧增長方向的定義。相關(guān)的數(shù)據(jù)類型定義:
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U; //無符號8位數(shù)
typedef signed char INT8S; //帶符號8位數(shù)
typedef unsigned int INTI6U; //無符號l6位數(shù)
typedef signed int INTl6S; //帶符號l6位數(shù)
typedef unsigned long INT32U; //無符號32位數(shù)
typedef signed long INT32S; //帶符號32位數(shù)
typedef float?FP32; //單精度浮點數(shù)
堆棧單位的定義:
typedef unsigned char OS_STK;//堆棧入口寬度為8位
狀態(tài)寄存器的定義:
typedef unsigned char OS_ CPU_SR;//定義狀態(tài)寄存器為8位
堆棧增長方向的定義:
#define OS_STK_GROW TH 1;//AVR堆棧由高地址向低地址增長
0S_CPU_C.C 文件主要包括任務(wù)堆棧初始化和實現(xiàn)操作系統(tǒng)規(guī)定的幾個Hook函數(shù)。其中移植需要的Hook函數(shù)如下:
OSTaskCreateHook();OSTaskDelHook()
OSTaskldleHook();OSTaskStateHook()
OSTaskSwHook();oSTCBInitHook()
OSTimeTickHook()
移植所需的OS— CPU-A.s中的函數(shù)有:
OS_CPU_SR_SAVE();OS_CPU_SR_RESTORE()
OSStartHightRdy();OSCtxSw0
OSINTCtxSw();OSTicklSR0
應(yīng)用移植后的嵌入式操作系統(tǒng)對控制器進行驗證,選取PB0~PB7作為輸入,PD0~PD7作為輸出,實現(xiàn)了二極管的發(fā)光演示。
部分源代碼如下:
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 結(jié)語
應(yīng)用Atmega128設(shè)計的嵌入式控制器能完成多功能數(shù)據(jù)采集與控制,CAN總線和RS232通信,移植的嵌入式實時操作系統(tǒng)可增強實時多任務(wù)信息處理的能力。并通過實驗對本設(shè)計進行了驗證。
評論