Zstack协议栈OSAL中添加任务事件消息、发送数据详细过程

本文将以在GenericApp项目的基础上,一步一步地建立一个应用;需要实现的任务目标:1、使用Zigbee终端设备捕获串口中的字符“silverze” 。2、当Zigbee终端设备捕获到该字符串后,触发一个Zstack协议栈OSAL的任务消息 Get_Name。3、Zigbee终端设备在OSAL任务处理函数中处理Get_Name消息,并发送“Hello,silverze!”至协调器,协调器通过串口输出接收到Zigbee终端设备发送的内容。

步骤一:Zigbee终端设备捕获字符串

首先,我们要让cc2530的串口在Zstack中使用起来,这一步骤可以参照我之前写的ZStack-CC2530-2.5.1a串口使用笔记一
Zstack串口能够正常使用起来后,我们新建两个文件Silverze.c、Silverze.h保存在..\GenericApp\source\文件夹下并添加到IAR工程App虚拟目录下。
在MT_UART.c文件中,有一个串口接收数据的回调函数:
void MT_UartProcessZToolData ( uint8 port, uint8 event ) ;为了减少对MT_UART.c文件的修改,我们将该回调函数指向到我们刚才新建立的Silverze.c文件中的函数:void Silverze_UartProcessZToolData ( uint8 port, uint8 event )

具体的函数代码

/***************************************************************************************************
 * @fn      Silverze_UartProcessZToolData
 *
 * @brief   处理UART接收到的数据
 *
 * @param   port     - UART port
 *          event    - Event that causes the callback
 *
 *
 * @return  None
 ***************************************************************************************************/
void Silverze_UartProcessZToolData ( uint8 port, uint8 event )
{
  uint8  ch;
  uint8  cnt = 0;
  uint8* str = "silverze";
  (void)event;  // Intentionally unreferenced parameter

  while (Hal_UART_RxBufLen(port))
  {
    HalUARTRead (port, &ch, 1);

    if(ch == str[cnt])
      cnt++;
    else
      cnt = 0;

    if(cnt == strlen((char*)str))
    {
   
      HalLedSet( HAL_LED_3, HAL_LED_MODE_TOGGLE );//加入板子上LED toggle,便于调试
      Silverze_SendGetNamdeOverMsg(); //接收到"silverze",发送OSAL任务消息
    }
  }
}

如果一切顺利,我们通过串口助手,发送包含“silverze”的字符串,就能看到开发板上(这个需要特定的开发板,根据使用的板子决定吧!)的LED3 Toggle。

步骤二:触发一个自定义的OSAL任务消息

完成步骤二的内容,后我们可以的应用已经能够通过串口捕获想要捕获的字符串了,而且我也将发送OSAL消息的函数结构给调用了。但这里还只是一个空壳,在完成该函数前;我们要先在Silverze.c文件中编写一个应用注册函数,这个函数很简单:

uint8 registTaskID;

/*****
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值