您的位置:首页 > 其它

06协议中向任务中添加事件基…

2013-12-02 09:11 162 查看
原文地址:06协议中向任务中添加事件基本流程说明作者:阿元osal_msg_send()函数的使用
----------------------------------------------------------------------------------                 
   
最近一直收到自己考博士问题的困扰,没怎么有心情看书学习。所以这两天又想起了前几天一直没有弄明白的一个问题,就是怎么往OSAL中的任务中添加一个事件。这么说有点空洞,所以,我们假设一个实验,然后大家跟着我走一个流程看看。

  
我假设的实验是在当串口有值输入时,lcd屏幕清屏并显示我的标志位。

  
串口回调函数用的基本是上次做过解释的串口回调函数(大家可以看看我以前的博文http://blog.sina.com.cn/s/blog_4c8287230100cyfk.html)。现在来看看我的实验步骤吧。首先是定义一个事件的标志(注意不要与系统自带的标志一样),我这里用的是

  #define  king_come 
0x11

   接着定义一个事件结构体,

  typedef struct

  {

   
osal_event_hdr_t 
hdr;  //事件头指针
  
 uint8            
mark;  //标志位

   }
myUartMsg_t;

  
然后是对事件结构的一系列说明,我做到一个函数里了,其实不是必须这样的。

   void xy_come(void)

  {

   //事件内存分配,添加事件之前一定要进行内存分配

   
myUartMsg_t *myUartMsg;

    myUartMsg=
(myUartMsg_t *)osal_msg_allocate( sizeof( myUartMsg_t )
);//重要

   //事件名称定义

   
myUartMsg->hdr.event = king_come;

  
 myUartMsg->mark=
right_come; //定义标志位

   
osal_msg_send( SampleApp_TaskID, (uint8 *)myUartMsg);

  }  

  这样基本是完成了一个事件的定义,下面我们就来应用这个事件。

  为了满足我们的实验,首先在串口回调函数中加入上面的事件说明函数

  void xy_uartCB (uint8 port,uint8 event)

 {

   uint8 temp[8];

   HalUARTRead(HAL_UART_PORT_0,temp,8);   
//芯片通过串口读数据

   right_come = 1;

  xy_come();

 }

  然后在事件处理函数中添加这个事件的处理程序

  uint16 SampleApp_ProcessEvent( uint8 task_id,
uint16 events )

{

       
……

       
case king_come:

         
if(right_come == 1)

         
{

           
ClearScreen();

           
Print8(HAL_LCD_LINE_2,20,"king_come.",1);

           
right_come = 0;

          
}

         
break;

       
……

}

  
好了,这样就向任务中添加了一个事件了。基本的流程就是先定义一个事件的标示,事件的结构,再在需要用到该事件的地方对事件的参数进行赋值。最后在事件处理函数里添加对事件的处理子程序。知道了之后总是觉得很简单,谢谢群里的Yicher!!

本文是作者原创,程序摘自TI
ZigBee06协议栈(ZStack-1.4.3),转载必须保证文章的完整性并标明出处,请尊重作者,支持原创。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: