请问CC2540 Delay的方法
请问在CC2540中,有没有delay这种指令可以用?
我有看到是用osal_start_timerEx
osal_start_timerEx( SimpleOsal_TaskID, SBP_START_DEVICE_EVT, 2000 );
但我中间没有定义事件(SBP_START_DEVICE_EVT),只想先停2秒再往下做事
以下用uart来说明,先送出ABC,2秒后再送出DEF
SerialPrintString("ABC");
delay 2 sec -->有没有这个指令???
SerialPrintString("DEF");
BLE-STACK基于OSAL, 事件处理必须短而快,因此,不能有硬delay函数。你希望的方式,要使用事件来完成。
if ( events & EVENT1)
{
SerialPrintString("ABC");
osal_start_timerEx( SimpleOsal_TaskID, EVENT2, 2000 );
return (events ^ EVENT1);
)
if ( events & EVENT2)
{
SerialPrintString("DEF");
return (events ^ EVENT2);
)
要不就是有周期性调用的函数,然后在里面写个状态机,就是不能delay
谢谢TY的回应,
以下这样写,我发现在UART都没有传东西出来
然后我用LCD只有看到EVENT1之后,就没有看到EVENT2
首先我在SipleOsal.h定义
#define EVENT1 0x0005
#define EVENT2 0x0006
接下来在启动装置内的SBP_START_DEVICE_EVT写EVENT1与EVENT2
if ( events & SBP_START_DEVICE_EVT )
{
if ( events & EVENT1)
{
SerialPrintString("ABC");
osal_start_timerEx( SimpleOsal_TaskID, EVENT2, 2000 );
HalLcdWriteString( "EVENT1", HAL_LCD_LINE_3 );
return (events ^ EVENT1);
}
if ( events & EVENT2)
{
SerialPrintString("DEF");
HalLcdWriteString( "EVENT2", HAL_LCD_LINE_4 );
return (events ^ EVENT2);
}
//8s之后再次启动
osal_start_timerEx( SimpleOsal_TaskID, EVENT2, 8000 );
return ( events ^ SBP_START_DEVICE_EVT );
}
事件不能定义成0x5,0x6,要定义为0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080.....
你0x05 是00000101,6是00000110,有两个bit。看来不了解OSAL原理的还是挺多的。
短的毫秒延时可以用nop指令。