微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > cc2640在定时器回调函数中不能正常修改广播数据?

cc2640在定时器回调函数中不能正常修改广播数据?

时间:10-02 整理:3721RD 点击:

我在Broadcaster工程里加入了按键功能,当按键按下之后修改广播数据。

在Board_initKeys(KeyPressHandler)初始化按键之后程序正常运行。当按键按下之后board_key.c里会在中断里面开启定时器,
当200ms到了之后会回调KeyPressHandler。

1.我就是直接在KeyPressHandler里面修改广播数据,advertData里面数据确实变化了但是实际广播出来的数据却没有变。
static void KeyPressHandler(uint8 keys)
{
  if (keys & KEY_UP)
  {
    advertData[7] = 0xFF;
   GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData);
  }
}

2.只在KeyPressHandler设置事件后里面将消息入队,在SimpleBLEBroadcaster_processAppMsg直接改变广播数据,
这种是可以实现动态修改广播数据。

static void KeyPressHandler(uint8 keys)
{
// Enqueue the event.
sbbEvt_t *pMsg;

// Create dynamic pointer to message.
  if (pMsg = ICall_malloc(sizeof(sbbEvt_t)))
  {
    pMsg->hdr.event = KEY_CHANGE_EVT;
    pMsg->hdr.state = keys;
    // Enqueue the message.
    Util_enqueueMsg(appMsgQueue, sem, (uint8_t*)pMsg);
   }
}

static void SimpleBLEBroadcaster_processAppMsg(sbbEvt_t *pMsg)
{
  switch (pMsg->hdr.event)
  {
    case SBB_STATE_CHANGE_EVT:
         SimpleBLEBroadcaster_processStateChangeEvt((gaprole_States_t)pMsg-> hdr.state);
    break;

    case KEY_CHANGE_EVT:
    {
          if ((pMsg->hdr.state) & KEY_UP)
           {
               advertData[7] = 0xFF;
               GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData);
          }
    }
    break;

    default: // Do nothing.

    break;
  }
}

我的疑问是难道修改广播数据只能在SimpleBLEBroadcaster_taskFxn线程里面?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top