首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ucos_ii 软件定时器介绍(3)

ucos_ii 软件定时器介绍(3)

最后,我们只需要修改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

           }

      }

}

继承事业,薪火相传
返回列表