微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events ) 中发送数据语句不运行

SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events ) 中发送数据语句不运行

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

参考网站上的Cc2540_throughput的代码,我在CC2541 SimpleBLEPeripheral的工程中增加了发送数据的代码,按照网上的提示,定义了事件SBP_BURST_EVT  0x0008,  可以就是不运行发送语句,不进入if {} 中。 怎么回事?

我理解第一次一定会进入if 的,进去后打开定时器设置SBP_BURST_EVT 事件,因此会不断进入if中,

 if ( events & SBP_BURST_EVT )
  {
    // Restart timer
    if ( SBP_BURST_EVT_PERIOD )
    {
      osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_BURST_EVT, SBP_BURST_EVT_PERIOD );
    }  
     sendData();
     sendData();
     sendData();
     sendData();

    //burstData[0] = !burstData[0];
    return (events ^ SBP_BURST_EVT);
  } 

你看下我刚发的速度测试的帖子吧

 http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/72389.aspx

看了你的贴,有启发, 我的程序如下, 在两个事件中增加发送任务,为了方便查看状态,在里面增加串口输出,

if ( events & SBP_PERIODIC_EVT )
{
// Restart timer
if ( SBP_PERIODIC_EVT_PERIOD )
{
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );
}

sendData();

HalUARTWrite(HAL_UART_PORT_0, "first_time_send\r\n", osal_strlen("first_time_send\G\r\n"));
// Perform periodic application task
performPeriodicTask();

return (events ^ SBP_PERIODIC_EVT);
}


if ( events & SBP_BURST_EVT )
{
// Restart timer
if ( SBP_BURST_EVT_PERIOD )
{
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_BURST_EVT, SBP_BURST_EVT_PERIOD );
}
sendData();
sendData();
sendData();
sendData();
HalUARTWrite(HAL_UART_PORT_0, "second_time_send\r\n", osal_strlen("second_time_send\G\r\n"));
//burstData[0] = !burstData[0];
return (events ^ SBP_BURST_EVT);
}

// Discard unknown events
return 0;
}

在SimpleBLEPeriple.h 中定义:

#define SBP_PERIODIC_EVT 0x0002

#define SBP_BURST_EVT 0x0004

这样,初始状态下,可以进入if ( events & SBP_PERIODIC_EVT ) 发送数据,

但if ( events & SBP_BURST_EVT )不进入,没有里面的串口输出,

和不明白,这两个事件都是很相同的,为什么SBP_PERIODIC_EVT可以触发,但BP_BURST_EVT 不能触发?

看了你的帖子,我在状态case下增加一个定时器,如下

case GAPROLE_CONNECTED:
{
HalUARTWrite(HAL_UART_PORT_0, "Connected\r\n", osal_strlen("Connected\r\n"));
#if (defined HAL_LCD) && (HAL_LCD == TRUE)
HalLcdWriteString( "Connected", HAL_LCD_LINE_3 );
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_BURST_EVT, SBP_BURST_EVT_PERIOD );
osal_setClock(0);

这样SBP_PERIODIC_EVT可以触发, 可以进行second_time_send 的发送, 

不明白,不加这个定时器为什么不能触发事件,

初始状态下第一次 if ( events & SBP_BURST_EVT )也应该是真的啊?

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

网站地图

Top