新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ucos-ii學(xué)習(xí)筆記——s12 lcd led 兩任務(wù)信號(hào)量通信

ucos-ii學(xué)習(xí)筆記——s12 lcd led 兩任務(wù)信號(hào)量通信

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏

OSStart();

}

staticvoidAppStartTask(void*pdata)

{

pdata=pdata;//pdata沒(méi)有用到,這樣的目的是防止編譯器提出warning

AppTickInit();//初始化時(shí)鐘滴答,為操作系統(tǒng)提供時(shí)鐘

OSStatInit();//初始化統(tǒng)計(jì)任務(wù)

AppTaskCreate();//創(chuàng)建應(yīng)用任務(wù)

//AppEventCreate();//建立事件

while(TRUE)//任務(wù)一般都是一個(gè)無(wú)限循環(huán)的結(jié)構(gòu)

{

OSTimeDlyHMSM(0,0,1,0);//等待1s,交出cpu,由于while無(wú)限循環(huán)中只有這一條語(yǔ)句,所以

//該起始任務(wù)第一次運(yùn)行以后,就一直處于掛起等待狀態(tài)

}

}

staticvoidAppTaskCreate(void)//使1-f的任務(wù)處于就緒態(tài),一旦OSstart(),優(yōu)先級(jí)最高的任務(wù)獲得CPU的使用權(quán)

{

//INT8Uerr;//錯(cuò)誤信息

OSTaskCreate(lcd_task,(void*)0,&lcd_task_stk[TASK_STK_SIZE-1],6);//創(chuàng)建任務(wù)lcd_task,優(yōu)先級(jí)為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)//任務(wù)lcd_task的函數(shù)代碼

{

pdata=pdata;//pdata沒(méi)有用到,這樣的目的是防止編譯器提出warning

for(;;)

{

OSSemPend(event_sem,0,&err);

//請(qǐng)求信號(hào)量參數(shù)Fun_Semp是信號(hào)量指針0那一項(xiàng)是等待時(shí)限timeout,0表示無(wú)限等待err表示錯(cuò)誤信息

delay_ms(5);

wr_string(0,0,s1);//第一行第一個(gè)位置顯示s1

delay_ms(1000);

wr_string(0,1,s2);//第一行第一個(gè)位置顯示s2

delay_ms(1000);

wr_string(0,2,s3);//第一行第一個(gè)位置顯示s3

delay_ms(1000);

wr_string(0,3,s4);//第一行第一個(gè)位置顯示s4

delay_ms(1000);

wr_lcd(comm,0x01);//清除顯示全屏清除

//init_lcd();

OSSemPost(event_sem);//釋放信號(hào)量

OSTimeDlyHMSM(0,0,1,0);//等待1s,交出cpu,任務(wù)調(diào)度一次防止獨(dú)占cpu,讓其他任務(wù)有機(jī)會(huì)運(yùn)行

}

}

staticvoidled_task(void*pdata)

{

INT8Ui=0;

pdata=pdata;//pdata沒(méi)有用到,這樣的目的是防止編譯器提出warning

for(;;)

{

OSSemPend(event_sem,0,&err);//請(qǐng)求信號(hào)量

for(i=0;i<10;i++)//閃爍10次

{

PORTB=0x00;//led閃爍

delay_ms(500);

PORTB=0xff;

delay_ms(500);

}

OSSemPost(event_sem);//釋放信號(hào)量

OSTimeDlyHMSM(0,0,0,500);//等待0.5s交出cpu

}

}

//問(wèn)什么當(dāng)兩個(gè)任務(wù)等待時(shí)間相同時(shí)(都為1s時(shí)),任務(wù)lcd每運(yùn)行兩次,任務(wù)led才運(yùn)行一次,當(dāng)?shù)却龝r(shí)間不同時(shí),

//才交替運(yùn)行(任務(wù)led的等待時(shí)間小于lcd時(shí)才正常交替運(yùn)行)

//該問(wèn)題要參考ucos-iifors12mytest工程的任務(wù)調(diào)度等待時(shí)間的問(wèn)題,一塊解決

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通道級(jí)聯(lián)

LcdClear();

DDRT=0x00;//將PORTT設(shè)置為輸入

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;



評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉