TI中文支持网
TI专业的中文技术问题搜集分享网站

请问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");

Yue TANG:

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

Sco Lin:

回复 Yue TANG:

谢谢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 );

  }

da qin zheng sheng:

短的毫秒延时可以用nop指令。

赞(0)
未经允许不得转载:TI中文支持网 » 请问CC2540 Delay的方法
分享到: 更多 (0)