各位前辈好,小弟最近在学习CC2640单片机,由于之前是跑裸机的,现在使用CC2640的TI-RTOS系统,感觉有点无所适从,很不适应,尤其是RTOS的事件这块,比如说有
#define SBP_STATE_CHANGE_EVT 0x0001
#define SBP_CHAR_CHANGE_EVT 0x0002
#define SBP_KEY_CHANGE_EVT 0x0004
#define SBP_ICALL_EVT ICALL_MSG_EVENT_ID
#define SBP_QUEUE_EVT UTIL_QUEUE_EVENT_ID
#define SBP_PERIODIC_EVT Event_Id_00
#define SBP_ALL_EVENTS (SBP_ICALL_EVT | \SBP_QUEUE_EVT | \SBP_PERIODIC_EVT | \SBP_QUEUE_PING_EVT)
#define SBP_ALL_EVENTS (SBP_ICALL_EVT | \SBP_QUEUE_EVT | \SBP_PERIODIC_EVT )
这些事件等,另外在不同的事件里面会做不同的判断,如
if (events & SBP_QUEUE_EVT)
{
while (!Queue_empty(appMsgQueue))
{
sbpEvt_t *pMsg = (sbpEvt_t *)Util_dequeueMsg(appMsgQueue);
if (pMsg)
{
// Process message.
SimpleBLEPeripheral_processAppMsg(pMsg);
// Free the space from the message.
ICall_free(pMsg);
}
}
}
if (events & SBP_PERIODIC_EVT)
{
Util_startClock(&periodicClock);
// Perform periodic application task
SimpleBLEPeripheral_performPeriodicTask();
}
我想问几个问题:
1 宏定义的这几个事件到底是什么意思
2 这几个事件到底判断的是啥?比如说 if (events & SBP_QUEUE_EVT) if (events & SBP_PERIODIC_EVT)
3 我发现只要是使用按键都会用SBP_QUEUE_EVT事件,然后在 if (events & SBP_QUEUE_EVT)中执行函数中SimpleBLEPeripheral_processAppMsg(pMsg),再执行SimpleBLEPeripheral_handleKeys(pMsg->hdr.state)语句,为什么要这么繁琐,直接在 if (events & SBP_QUEUE_EVT)中执行SimpleBLEPeripheral_handleKeys(pMsg->hdr.state)语句不久好了吗?
请教各位前辈,谢谢。
Nancy Wang:
请去无线论坛咨询。
e2echina.ti.com/…/