微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ucos-ii学习笔记——s12 lcd led 两任务信号量通信

ucos-ii学习笔记——s12 lcd led 两任务信号量通信

时间:11-28 来源:互联网 点击:

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);

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top