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

转载 2013年12月02日 09:11:02

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),转载必须保证文章的完整性并标明出处,请尊重作者,支持原创。

相关文章推荐

ZigBee 中 z-Stack协议中的任务、事件、消息处理流程

1,系统上电以后在main函数的最后会调用osal_start_system()方法来启动系统,这个方法是个死循环,只循环里面只做一件事:不断的检测任务,看任务里面有没有事件需要处理;    检测方...
  • PZ0605
  • PZ0605
  • 2017年03月17日 11:53
  • 575

SpannableString 来改变textView中http协议,手机号,已经你想要改变的字的颜色,以及添加onClick事件

SpannableString 来改变textView中http协议,手机号,已经你想要改变的字的颜色,以及添加onClick事件...

06 Spring 异步执行,任务调度(@Schedule、@Async)

转载请注明来源 赖赖的博客导语 一个简单的抽象,可以解决百分之八十的问题。 在写Spring 应用的时候,会遇到一些异步执行和任务调度的问题,例如:Spring MVC中需要向微信发送请求,告诉微...

UniversalImageLoader源码解读06-任务调度

在介绍了一些基本组件后,我们越来越接近核心逻辑,任务调度设计一些数据结构,这些数据结构决定了任务如何调度。     在开始之前,笔者建议如果读者还不知道ReentrantLock Condition如...
  • mtaxot
  • mtaxot
  • 2016年05月12日 09:27
  • 735

C++多核高级编程 - 06 并发任务的通信和同步(1) 通信和同步

一, 依赖关系 当进程或线程相互之间要求通信或协作完成一个共同的目标时,他们之间便存在了依赖关系。 通信依赖:当TaskA要求来自TaskB的数据才能执行它的工作时,TaskA和TaskB...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:06协议中向任务中添加事件基…
举报原因:
原因补充:

(最多只允许输入30个字)