CC2541 osal_start_timerEx()问题
TI及各位朋友大家好!
在向CC2541 osal_start_timerEx()添加定时事件时我碰到了一个新问题,如下:
在TI例程文件“simpleBLEperipheral.h”里面定义了:
// Simple BLE Peripheral Task Events, Total 15 Task Events can be included in one project
#define SBP_START_DEVICE_EVT 0x0001
#define SBP_PERIODIC_EVT 0x0002
#define SBP_ADV_IN_CONNECTION_EVT 0x0004
#define BATT_PERIODIC_EVT 0x0006
#define SBP_MOTOR_RUN_OVERTIME_EVT 0x0008
但由于产品需要,需要在上述“SBP_MOTOR_RUN_OVERTIME_EVT”事件后面再多加一个定时中断事件进来。
#define SBP_AUTO_LOCK_EVT 0x0005 // 设成0x0009都不行--即中断没反应,也暂时不管它吧
在中断事件“SBP_MOTOR_RUN_OVERTIME_EVT”里面添加如下命令--即启动“SBP_AUTO_LOCK_EVT”定时(AUTO_LOCK_DELAY=8000):
if ( events & SBP_MOTOR_RUN_OVERTIME_EVT )
{...
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_AUTO_LOCK_EVT, AUTO_LOCK_DELAY );
P1_3 = 1; // turn on led,for test only
return ( events ^ SBP_MOTOR_RUN_OVERTIME_EVT );
}
上述中断测试工作正常即8秒后SBP_AUTO_LOCK_EVT事件被正确触发(P1_3控制的灯被点亮)。也没问题。
但当“SBP_AUTO_LOCK_EVT”事件被触发后,这个函数里面的程序就乱套了(不管我是否Disable/Enable "P1_3 = 0; "命令行, “P1_3 = 0; ”一直被执行!即P1_3控制的灯都会熄灭。好像根本不理会这个命令行一样。奇怪了)
if ( events & SBP_AUTO_LOCK_EVT )
{
P1_3 = 0; // turn off led,for test only
return ( events ^ SBP_AUTO_LOCK_EVT );
}
请问如何解决该问题?急切等待回答,谢谢!
定义事件只能是1个bit位的,如0x0001,0x0002,0x0004,0x0008....
0x0005是0101,有两个bit了,这是不对的。你需要熟悉下osal以及event
谢谢TI同事的点拨,改正了,运行正常。非常感谢!
不错,谢谢。