用周工2131工程模板+ucosii 有个问题请大家帮忙啊
我是初学者,想试验一下使用信号量功能 程序如下:
#include "config.h" #include "stdlib.h"
#define TaskStkLengh 64 //Define the Task0 stack length 定义用户任务0的堆栈长度 OS_STK TaskStk [TaskStkLengh]; //Define the Task0 OS_STK Taskdisp_1 [TaskStkLengh]; OS_STK Taskdisp_2 [TaskStkLengh]; uint8 i; uint8 a1[5]; uint8 b1[5];
void __irq irq_rtc(void) { ILR = 0x03; // 清除中断标志 VICVectAddr = 0x00;
write_rtc();
}
void init_ic(void) { CCR=0x02;//reset RTC ILR=0x03;//clear interrupt flag CIIR=0x01;//second increament interrupt AMR=0xff;//alarm not interrupt PREINT=365;//PREINT = int (pclk / 32768) - 1; PREFRAC=6912;//PREFRAC = pclk - ((PREINT +1) x 32768); VICIntSelect =0x00000000; VICVectCntl10=0x20|13; VICVectAddr10=(uint32)irq_rtc; VICIntEnable=(1<<13); CCR=0x01;//enable RTC }
void Task0(void *pdata); //声明Task0 任务0 void Task1(void *pdata); //声明Task0 任务1 void Task2(void *pdata); OS_EVENT *DispSem;
int main (void) { OSInit (); DispSem=OSSemCreate(1); OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 2); OSStart (); return 0; } /********************************************************************************************************* ** Task0 任务0 ********************************************************************************************************/
void Task0 (void *pdata) { pdata = pdata; //TargetInit (); PINSEL0=0; PINSEL1=0; PINSEL2=0; IO0DIR=0x01e81c70; IO1DIR=0xf3ff0000;//P1.31,P1.30,P1.29 P1.28are output init_ic(); init_lcd(); read_date(); OSTaskCreate(Task1,(void *)0,&Taskdisp_1[TaskStkLengh-1],3); OSTaskCreate(Task2,(void *)0,&Taskdisp_2[TaskStkLengh-1],4); while (1) { OSTimeDly(10); } } /********************************************************************************************************* ** Task1 ********************************************************************************************************/ void Task1 (void *pdata) { uint8 err; pdata = pdata;
while(1) { OSSemPend(DispSem,0,& err); turn_on_lcd(); //液晶循环显示图片1 delay(2000000); disp_1(); delay(2000000); disp_void(0,0,6,192); OSTimeDly(10); err=OSSemPost(DispSem); } }
/********************************************************************************************************* ** Task2 ********************************************************************************************************/ void Task2 (void *pdata) { uint8 err; pdata=pdata; while(1) { OSSemPend(DispSem,0,& err); delay(2000000); disp_2(); //液晶循环显示图片2 delay(2000000); disp_void(0,0,6,192); delay(2000000); //OSTimeDly(10); err=OSSemPost(DispSem); }
}
/********************************************************************************************************* ** End Of File ********************************************************************************************************/ 结果是:只显示了图片1 而且只显示1次 ,也就是任务2 根本没有被执行 。。。。郁闷好久,请大家帮忙看看阿 。。。。。不胜感激!!! |