[CODE]
#include "includes.h"
#define TASK_STK_SIZE 64 /* 定义任务堆栈大小 */
OS_STK TaskStartStkA[TASK_STK_SIZE];
OS_STK TaskStartStkB[TASK_STK_SIZE];
void TaskStartA(void *data); /* 前导声明任务(函数) */
void TaskStartB(void *data); /* 前导声明任务(函数) */
OS_EVENT *COMMBOX; INT8U TaskA,TaskB;
INT8U myErr;
void main (void)
{ WDTCTL = WDTPW + WDTHOLD; /* 禁止看门狗 */ P2DIR|=BIT0+BIT1; P2OUT=0xff; OSInit(); /* 初始化uCOS-II */ OSTaskCreate(TaskStartA, (void *)0, &TaskStartStkA[TASK_STK_SIZE - 1], 0); OSTaskCreate(TaskStartB, (void *)0, &TaskStartStkB[TASK_STK_SIZE - 1], 1); COMMBOX=OSMboxCreate((void*)TaskA); OSStart(); /* 开始任务调度 */
}
//************************************************************************
void TaskStartA (void *pdata)
{ pdata = pdata; /* 无任何意义,防止编译器报警 */
WDTCTL = WDT_MDLY_32; /* 设置时钟节拍间隔为32ms */ IE1 |= BIT0; /* 开看门狗定时器中断 */ while (1)
{ if(OSMboxPend(COMMBOX,0,&myErr)== (void *)& TaskA) { P2OUT^=BIT0; OSMboxPost(COMMBOX,(void *)& TaskB); OSTimeDly(100); }
}
//************************************************************************
void TaskStartB (void *pdata)
{ pdata = pdata; /* 无任何意义,防止编译器报警 */
WDTCTL = WDT_MDLY_32; /* 设置时钟节拍间隔为32ms */ IE1 |= BIT0; /* 开看门狗定时器中断 */ while (1)
{ if(OSMboxPend(COMMBOX,0,&myErr)== (void *)& TaskB) { P2OUT^=BIT1; OSMboxPost(COMMBOX,(void *)& TaskA); OSTimeDly(100); }
}
[/CODE]
ucos移植调试已经通过,我就用邮箱编两个任务试试,让两个led闪。可是程序运行起来,灯不亮,进不到if(OSMboxPend(COMMBOX,0,&myErr)== (void *)& TaskA) 这句里面。不知道是不是任务切换编的有问题,这是根据网上的例程编的。还请高手给指点指点。 |