EventMutex2=OSMutexCreate(MUTEX_PIP_2,&err);
OSEventNameSet(EventMutex2,"Mutex#2",&err);
#endif
#ifOS_FLAG_EN>0
FlagGrp1=OSFlagCreate(0x00FF,&err);
OSFlagNameSet(FlagGrp1,"Flag#1",&err);
FlagGrp2=OSFlagCreate(0xFF00,&err);
OSFlagNameSet(FlagGrp2,"Flag#2",&err);
#endif
#ifOS_MEM_EN>0
MemPart1=OSMemCreate(&MemPart1Tbl[0],MEM_BLKS_1,MEM_BLK_SIZE_1,&err);
OSMemNameSet(MemPart1,"Partition#1",&err);
MemPart2=OSMemCreate(&MemPart2Tbl[0],MEM_BLKS_2,MEM_BLK_SIZE_2,&err);
OSMemNameSet(MemPart2,"Partition#2",&err);
#endif
}
staticvoidlcd_task(void*pdata)//任务lcd_task的函数代码
{
pdata=pdata;//pdata没有用到,这样的目的是防止编译器提出warning
for(;;)
{
OSSemPend(event_sem,0,&err);
//请求信号量参数Fun_Semp是信号量指针0那一项是等待时限timeout,0表示无限等待err表示错误信息
delay_ms(5);
wr_string(0,0,s1);//第一行第一个位置显示s1
delay_ms(1000);
wr_string(0,1,s2);//第一行第一个位置显示s2
delay_ms(1000);
wr_string(0,2,s3);//第一行第一个位置显示s3
delay_ms(1000);
wr_string(0,3,s4);//第一行第一个位置显示s4
delay_ms(1000);
wr_lcd(comm,0x01);//清除显示全屏清除
//init_lcd();
OSSemPost(event_sem);//释放信号量
OSTimeDlyHMSM(0,0,1,0);//等待1s,交出cpu,任务调度一次防止独占cpu,让其他任务有机会运行
}
}
staticvoidled_task(void*pdata)
{
INT8Ui=0;
pdata=pdata;//pdata没有用到,这样的目的是防止编译器提出warning
for(;;)
{
OSSemPend(event_sem,0,&err);//请求信号量
for(i=0;i<10;i++)//闪烁10次
{
PORTB=0x00;//led闪烁
delay_ms(500);
PORTB=0xff;
delay_ms(500);
}
OSSemPost(event_sem);//释放信号量
OSTimeDlyHMSM(0,0,0,500);//等待0.5s交出cpu
}
}
//问什么当两个任务等待时间相同时(都为1s时),任务lcd每运行两次,任务led才运行一次,当等待时间不同时,
//才交替运行(任务led的等待时间小于lcd时才正常交替运行)
//该问题要参考ucos-iifors12mytest工程的任务调度等待时间的问题,一块解决
staticvoidAppTask1(void*pdata)
{
pdata=pdata;
for(;;)
{
Flash_Led(7,1);
OSTimeDlyHMSM(0,0,1,0);
}
}
staticvoidAppTask2(void*pdata)
{
pdata=pdata;
LcdClear();
for(;;)
{
LcdWriteStr(0,0,"illworkhard");
OSTimeDlyHMSM(0,0,1,0);
LcdClear();
LcdWriteStr(0,0,"ificangetthechance");
LcdWriteStr(1,0,"ipromisetoyou");
OSTimeDlyHMSM(0,0,1,0);
LcdClear();
}
}
staticvoidAppTask3(void*pdata)
{
pdata=pdata;
PWM_Init();//pwm初始化,将23通道级联
LcdClear();
DDRT=0x00;//将PORTT设置为输入
for(;;)
{
LcdWriteStr(0,0,"welcometeacher!");
PWM_Init();
PWMDuo_Dutycycle(100);
OSTimeDlyHMSM(0,0,1,0);
Close_PWM();
LcdClear();
OSTimeDlyHMSM(0,0,0,500);
}
}
staticvoidAppTask4(void*pdata)
{
INT8Uerr;
}
staticvoidAppTask5(void*pdata)
{
INT8Uerr;
DDRB_DDRB3=1;
pdata=pdata;
while(TRUE){
AppTask5Ctr++;
#ifOS_Q_EN>0
OSQPost(EventQ1,(void*)"Msg#3toQ1");
OSTimeDly(20);
OSQPost(EventQ2,(void*)"Msg#4toQ2");
#endif
OSTimeDly(40);
PORTB_PB3=~PORTB_PB3;
}
}
staticvoidAppTask6(void*pdata)
{
INT8Uerr;
char*pmsg;
chars[30];
pdata=pdata;
while(TRUE){
AppTask6Ctr++;
#ifOS_Q_EN>0
pmsg=(char*)OSQPend(EventQ1,0,&err);
strcpy(s,pmsg);
#endif
OSTimeDly(1);
}
}
staticvoidAppTask7(void*pdata)
{
INT8Uerr;
char*pmsg;
chars[30];
pdata=pdata;
while(TRUE){
AppTask7Ctr++;
#ifOS_Q_EN>0
pmsg=(char*)OSQPend(EventQ2,0,&err);
strcpy(s,pmsg);
#endif
OSTimeDly(1);
}
}
staticvoidAppTask8(void*pdata)
{
INT8Uerr;
pdata=pdata;
while(TRUE){
AppTask8Ctr++;
#ifOS_FLAG_EN>0
OSFlagPost(FlagGrp1,0x000F,OS_FLAG_SET,&err);
OSTimeDly(100);
OSFlagPost(FlagGrp1,0x00F0,OS_FLAG_SET,&err);
OSTimeDly(100);
OSFlagPost(FlagGrp1,0x0F00,OS_FLAG_SET,&err);
OSTimeDly(100);
OSFlagPost(FlagGrp1,0xF000,OS_FLAG_SET,&err);
OSTimeDly(100);
#endif
OSTimeDly(1);
}
}
staticvoidAppTask9(void*pdata)
{
INT8Uerr;
pdata=pdata;
while(TRUE){
AppTask9Ctr++;
#ifOS_FLAG_EN>0
OSFlagPend(FlagGrp1,0x00FF,OS_FLAG_WAIT_SET_ALL+OS_FLAG_CONSUME,100,&err);
#endif
OSTimeDly(100);
}
}
staticvoidAppTaskA(void*pdata)
{
INT8Uerr;
pdata=pdata;
while(TRUE){
AppTaskACtr++;
#ifOS_FLAG_EN>0
OSFlagPend(FlagGrp1,0xFF00,OS_FLAG_WAIT_SET_ALL+OS_FLAG_CONSUME,100,&err);