SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events ) 中发送数据语句不运行
参考网站上的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 )也应该是真的啊?