最后,我们只需要修改test.c函数了,打开test.c,输入如下代码:
/////////////////////////UCOSII任务设置/////////////////////////////////// //START 任务 #defineSTART_TASK_PRIO 10 //设置任务优先级 #defineSTART_STK_SIZE 64 //设置任务堆栈大小 OS_STKSTART_TASK_STK[START_STK_SIZE]; //任务堆栈 void start_task(void*pdata); //任务函数
//LED任务 #defineLED_TASK_PRIO 7 //设置任务优先级 #defineLED_STK_SIZE 64 //设置任务堆栈大小 OS_STKLED_TASK_STK[LED_STK_SIZE]; //任务堆栈 voidled_task(void *pdata); //任务函数
//触摸屏任务 #defineTOUCH_TASK_PRIO 6 //设置任务优先级 #defineTOUCH_STK_SIZE 64 //设置任务堆栈大小 OS_STKTOUCH_TASK_STK[TOUCH_STK_SIZE];//任务堆栈 voidtouch_task(void *pdata); //任务函数
//队列消息显示任务 #defineQMSGSHOW_TASK_PRIO 5 //设置任务优先级 #defineQMSGSHOW_STK_SIZE 64 //设置任务堆栈大小 OS_STKQMSGSHOW_TASK_STK[QMSGSHOW_STK_SIZE]; //任务堆栈 voidqmsgshow_task(void *pdata); //任务函数
//主任务 #defineMAIN_TASK_PRIO 4 //设置任务优先级 #defineMAIN_STK_SIZE 128 //设置任务堆栈大小 OS_STKMAIN_TASK_STK[MAIN_STK_SIZE]; //任务堆栈 voidmain_task(void *pdata); //任务函数 ////////////////////////////////////////////////////////////////////////////// //信号量集任务 #defineFLAGS_TASK_PRIO 3 //设置任务优先级 #defineFLAGS_STK_SIZE 64 //设置任务堆栈大小 OS_STKFLAGS_TASK_STK[FLAGS_STK_SIZE]; //任务堆栈 voidflags_task(void *pdata); //任务函数
//按键扫描任务 #defineKEY_TASK_PRIO 2 //设置任务优先级 #defineKEY_STK_SIZE 64 //设置任务堆栈大小 OS_STKKEY_TASK_STK[KEY_STK_SIZE]; //任务堆栈 voidkey_task(void *pdata); //任务函数
OS_EVENT *msg_key; //按键邮箱事件块 OS_EVENT *q_msg; //消息队列 OS_TMR *tmr1; //软件定时器1 OS_TMR *tmr2; //软件定时器2 OS_TMR *tmr3; //软件定时器3 OS_FLAG_GRP *flags_key; //按键信号量集 void *MsgGrp[256]; //消息队列存储地址,最大支持256个消息 //软件定时器1的回调函数 //每100ms执行一次,用于显示CPU使用率和内存使用率 voidtmr1_callback(OS_TMR *ptmr,void *p_arg) { static u16 cpuusage=0; static u8tcnt=0; POINT_COLOR=BLUE; if(tcnt==5) { LCD_ShowxNum(182,10,cpuusage/5,3,16,0); //显示CPU使用率 cpuusage=0;tcnt=0; } cpuusage+=OSCPUUsage; tcnt++; LCD_ShowxNum(182,30,mem_perused(SRAMIN),3,16,0); //显示内存使用率 LCD_ShowxNum(182,50,((OS_Q*)(q_msg->OSEventPtr))->OSQEntries,3,16,0X80); //显示队列当前的大小 } //软件定时器2的回调函数 voidtmr2_callback(OS_TMR *ptmr,void *p_arg) { static u8 sta=0; switch(sta) { case 0CD_Fill(121,221,lcddev.width-1,lcddev.height-1,RED); break; case 1CD_Fill(121,221,lcddev.width-1,lcddev.height-1,GREEN); break; case 2CD_Fill(121,221,lcddev.width-1,lcddev.height-1,BLUE);break; case 3CD_Fill(121,221,lcddev.width-1,lcddev.height-1,MAGENTA);break; case 4CD_Fill(121,221,lcddev.width-1,lcddev.height-1,GBLUE);break; case5 软件定时器介绍 (转载)" border="0">CD_Fill(121,221,lcddev.width-1,lcddev.height-1,YELLOW);break; case 6CD_Fill(121,221,lcddev.width-1,lcddev.height-1,BRRED);break; } sta++; if(sta>6)sta=0; } //软件定时器3的回调函数 voidtmr3_callback(OS_TMR *ptmr,void *p_arg) { u8* p; u8 err; static u8 msg_cnt=0; //msg编号 p=mymalloc(SRAMIN,13); //申请13个字节的内存 if(p) { sprintf((char*)p,"ALIENTEK d",msg_cnt); msg_cnt++; err=OSQPost(q_msg,p);//发送队列 if(err!=OS_ERR_NONE) //发送失败 { myfree(SRAMIN,p); //释放内存 OSTmrStop(tmr3,OS_TMR_OPT_NONE,0,&err); //关闭软件定时器3 } } } |