芯片:CC2640R2F
工程:simplecentral
设定了一个util定时器,但是没有按照预期的进入事件,请问在standby模式下util时钟能否触发,是否无法唤醒呢。
我从现象看,好像是没有触发
YiKai Chen:
照理來說應該可以觸發的,你把你的util定时器程序貼上來看看
z z46:
回复 YiKai Chen:
我的程序:
#define SC_EVT_OPEN_SCAN 0x0B
#define SC_SCAN_PERIOD 8000
// Clock instance for scan events.static Clock_Struct clkScanOpen;
Util_constructClock(&clkScanOpen, SimpleCentral_clockHandler,SC_SCAN_PERIOD, 0, false, SC_EVT_OPEN_SCAN);.....Util_startClock(&clkScanOpen);...void SimpleCentral_clockHandler(UArg arg) {uint8_t evtId = (uint8_t) (arg & 0xFF);switch (evtId){case SC_EVT_READ_RSSI:SimpleCentral_enqueueMsg(SC_EVT_READ_RSSI, (uint8_t) (arg >> 8) , NULL);break;case SC_EVT_READ_RPA:// Restart timerUtil_startClock(&clkRpaRead);// Let the application handle the eventSimpleCentral_enqueueMsg(SC_EVT_READ_RPA, 0, NULL);break;case SC_EVT_OPEN_SCAN:GapScan_enable(scanPeriod, scanDuration, 0);SC_Log_info0("clock Handler SC_EVT_OPEN_SCAN");break;default:break;} }
我在打印扫描结果的地方开启时钟并关闭扫描,然后等待时钟触发,再重新打开扫描。
麻烦帮忙看下代码有什么问题,谢谢大神
Viki Shi:
可以的, 参考下 util.c中的代码
YiKai Chen:
回复 z z46:
你參考一下 SBC_RSSI_READ_EVT的作法然後在SimpleCentral_processAppMsg加上自己的event case
z z46:
回复 YiKai Chen:
我找到原因了,与util无关,是因为在处理util event的case中打开了扫描,请问这样的操作有问题吗?
... case SC_EVT_OPEN_SCAN:GapScan_enable(scanPeriod, scanDuration, 0);SC_Log_info0("clock Handler SC_EVT_OPEN_SCAN");break; ...只要注释掉GapScan_enable这句代码就行了
我的设计意图:利于simplecentral例程做一个仅扫描广播的程序,如果接收到了期待的数据包,则关闭此次扫描(节省电量),若没有收到则一直扫描到设定的duration。因此在扫描到期待数据的情况下,我需要手动关闭扫描(GapScan_disable),并开启定时器,在定时器触发后,开启扫描。
请问我这种实现方式有问题吗?
YiKai Chen:
回复 z z46:
要打開掃描應該是用 GAPCentralRole_StartDiscovery吧
z z46:
回复 YiKai Chen:
不是啊大神,我用的2.2版本的SDK,都没有见过你说的这个函数
YiKai Chen:
回复 z z46:
你芯片用的是CC2640還是CC2640R2F?
z z46:
回复 YiKai Chen:
CC2640R2F
YiKai Chen:
回复 z z46:
CC2640R2F最新的sdk是2.30.00.28,你是用這個版本嗎?