微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 请问CC2540 Delay的方法

请问CC2540 Delay的方法

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

请问在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指令。

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

网站地图

Top