我是 用周工lpc213x模板,
#include "config.h" #include "stdlib.h"
#define TaskStkLengh 128 //Define the Task0 stack length 定义用户任务0的堆栈长度 OS_STK TaskStk [TaskStkLengh]; //Define the Task0 stack 定义用户任务0的堆栈 OS_STK Taskdisp_1 [TaskStkLengh]; OS_STK Taskdisp_2 [TaskStkLengh];
void Task0(void *pdata); //声明Task0 任务0 void Task1(void *pdata); //声明Task0 任务1 void Task2(void *pdata); OS_EVENT *DispSem; OS_EVENT *MsgBox;
int main (void) { OSInit (); DispSem=OSSemCreate(2);
OSTaskCreate(Task0,(void *)0,&TaskStk[TaskStkLengh - 1], 2); OSStart (); return 0; }
void Task0 (void *pdata) { pdata = pdata; TargetInit (); OSTaskCreate(Task1,(void *)0,&Taskdisp_1[TaskStkLengh-1],3); OSTaskCreate(Task2,(void *)0,&Taskdisp_2[TaskStkLengh-1],4); while (1) { OSTimeDly(10); } }
void Task1 (void *pdata) { uint8 err; //volatile uint32 data=1000000; pdata = pdata; while(1) { //OSSemPend(DispSem,0,&err);-------为什么 这句如果注释掉任务2无法执行????? disp_1(); OSTimeDly(10); } }
void Task2 (void *pdata) { uint8 err; pdata=pdata; while(1) { OSSemPend(DispSem,0,&err); disp_2(); OSTimeDly(1); }
}
好奇怪啊,本来的建立2个信号量,2个任务各获得一个(即文中注释的语句保留),两个任务正常切换,而若是把那句注释掉(即只让任务2等待信号量,任务1无条件执行)怎么任务2总是得不到信号量无法执行呢?? 请大家帮忙指点一二。。。。
|