This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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

Other Parts Discussed in Thread: CC2541, CC2540

参考网站上的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);
  } 

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

    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 )也应该是真的啊?