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

  • 相关阅读:
    对pg_latch.c 的来源探索
    对PostgreSQL的执行计划的初步学习
    21个css和Ajax表格
    23种设计模式有趣诠释
    Spket IDE, Ext开发人员的紫色匕首~
    Sql Server 2008 Reporting Services系列(一)
    C#积累(二)——ASP.NET的Session会加锁
    在TSQL语句中访问远程数据库(openrowset/opendatasource/openquery)
    ASP.NET视图的保存与加载解析(一)——视图的保存
    C#积累(一)——扩展方法就近原则和匿名类型的成员探讨
  • 原文地址:https://www.cnblogs.com/songfeixiang/p/3733825.html
Copyright © 2020-2023  润新知