TI中文支持网
TI专业的中文技术问题咨询交流网站

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

我在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线程里面?

user5329684:

按键事件可以看作是个中断。

中断处理应该尽可能短,所以需要把处理工作放到queue中。

linux的话,中断分为上半部和下半部,把处理工作放到下半部,理解应该差不多。

但是奇怪的是,只是设置一个gaprole参数而已,非常简单,为什么有问题呢?

这个问题后来你解决了吗?

赞(0)
未经允许不得转载:TI中文支持网 » cc2640在定时器回调函数中不能正常修改广播数据?
分享到: 更多 (0)