OSStart();
}
staticvoidAppStartTask(void*pdata)
{
pdata=pdata;//pdata沒有用到,這樣的目的是防止編譯器提出warning
AppTickInit();//初始化時鐘滴答,為操作系統(tǒng)提供時鐘
OSStatInit();//初始化統(tǒng)計任務
AppTaskCreate();//創(chuàng)建應用任務
//AppEventCreate();//建立事件
while(TRUE)//任務一般都是一個無限循環(huán)的結構
{
OSTimeDlyHMSM(0,0,1,0);//等待1s,交出cpu,由于while無限循環(huán)中只有這一條語句,所以
//該起始任務第一次運行以后,就一直處于掛起等待狀態(tài)
}
}
staticvoidAppTaskCreate(void)//使1-f的任務處于就緒態(tài),一旦OSstart(),優(yōu)先級最高的任務獲得CPU的使用權
{
//INT8Uerr;//錯誤信息
OSTaskCreate(lcd_task,(void*)0,&lcd_task_stk[TASK_STK_SIZE-1],6);//創(chuàng)建任務lcd_task,優(yōu)先級為6
OSTaskCreate(led_task,(void*)0,&led_task_stk[TASK_STK_SIZE-1],7);
}
staticvoidAppEventCreate(void)
{
INT8Uerr;
#ifOS_SEM_EN>0
EventSem1=OSSemCreate(1);
OSEventNameSet(EventSem1,"Sem.#1",&err);
EventSem2=OSSemCreate(1);
OSEventNameSet(EventSem2,"Sem.#2",&err);
#endif
#ifOS_MBOX_EN>0
EventMbox1=OSMboxCreate((void*)1);
OSEventNameSet(EventMbox1,"Mailbox#1",&err);
EventMbox2=OSMboxCreate((void*)1);
OSEventNameSet(EventMbox2,"Mailbox#2",&err);
#endif
#ifOS_Q_EN>0
EventQ1=OSQCreate(&EventQTbl1[0],EVENT_Q_1_SIZE);
OSEventNameSet(EventQ1,"Queue#1",&err);
EventQ2=OSQCreate(&EventQTbl2[0],EVENT_Q_2_SIZE);
OSEventNameSet(EventQ2,"Queue#2",&err);
#endif
#ifOS_MUTEX_EN>0
EventMutex1=OSMutexCreate(MUTEX_PIP_1,&err);
OSEventNameSet(EventMutex1,"Mutex#1",&err);
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;
評論