Part Number:LAUNCHXL-CC26X2R1
引用帖
这个问题帖中讲,该SP_PERIODIC_EVT事件是预期的,请问是什么意思?哪个任务每500ms调用一次的?
谢谢!
Galaxy Yue:
您好,
预期是指无意外应该会发生的。
调用了SP_PERIODIC_EVT事件,每5000ms执行一次
// 參考流程圖中的數字2 // 參考剛剛建立定時器時候的第二個和第五個參數 // 當時間到的時候,就會呼叫SimplePeripheral_clockHandler這個函式 // 並且把 SP_PERIODIC_EVT 當作參數代入 static void SimplePeripheral_clockHandler(UArg arg) {spClockEventData_t *pData = (spClockEventData_t *)arg;// 這邊會取出參數,判斷是否為定時器的事件if (pData->event == SP_PERIODIC_EVT){// 因為現在這段程式是執行在軟體中斷的執行緒,// 我們不可以在這邊做太多事情,// 所以只把"定時器到期"這個訊息放到佇列(Queue)中。SimplePeripheral_enqueueMsg(SP_PERIODIC_EVT, NULL);} }SimplePeripheral_enqueueMsg(SP_PERIODIC_EVT, NULL);
,
y y:
hi,
定时器建立时未开启,上电之后未执行任何操作状态下,debug也没有发现在其他地方开启此定时器,但是出现的结果就是会执行SimplePeripheral_clockHandle()函数;
所以始终不能理解到底是哪段程序start clkPeriodic定时器。
谢谢!
,
Galaxy Yue:
不是很明确你的问题背景,可以给出更多信息吗?
你目前只在进行simple_peripheral吗?
目前看你post出来的code,最后一个参数就是 :
– 传递给回调函数的参数。
,
y y:
1、上面给出的是构建周期定时器的函数,倒数第二个参数false表示创建后没有立即开始定时器;
2、我用的是官方SDK中的simple_peripheral_CC26X2R1_LAUNCHXL_tirtos7_ticlang例程,没有任何修改。通过BLE_LOG查看gBleLogBuffer内容发现上电之后没有执行任何操作会不断地进入周期事件SP_PERIODIC_EVT,但是程序中没有执行开启周期定时器的指令。
,
Galaxy Yue:
1,false 确实是
– TRUE 立即开始,FALSE 等待。
没有立即开启,等待一定时间开启,你应该需要调用Util_startClock()
2.
#define SP_PERIODIC_EVT 6
// Application events #define SP_STATE_CHANGE_EVT0 #define SP_CHAR_CHANGE_EVT1 #define SP_KEY_CHANGE_EVT2 #define SP_ADV_EVT3 #define SP_PAIR_STATE_EVT4 #define SP_PASSCODE_EVT5 #define SP_PERIODIC_EVT6 #define SP_READ_RPA_EVT7 #define SP_SEND_PARAM_UPDATE_EVT8 #define SP_CONN_EVT9 #define APP_MSG_SC_TASK_ALERT0x0099根据note:
Clock functions must not call blocking kernel APIs or TI-RTOS driver APIs! Executing long routines will impact real-time constraints placed in high priority tasks allocated for wireless protocol stacks!
认为可能是调用了blocking or TI-RTIOS API导致的
如果你并未进行任何修改的话,那应该是在之前对开发板进行类似广播或者其他在BLE STACK中的操作,导致这样,并且请考虑事件的优先级
根据示意图结合问题来看,也考虑colck 对象已经传递到SWI CONTEXT(步骤一),并且重新启动该函数的定期执行,,它将重新启动 periodicClockClock 对象(步骤三)。
https://software-dl.ti.com/simplelink/esd/simplelink_cc13x2_26x2_sdk/3.30.00.03/exports/docs/ble5stack/ble_user_guide/html/ble-stack-tirtos/clocks.html#fig-periodic-clock
,
y y:
hi,
我找到原因了。
log出来的信息会打印APP_PERIODIC_EVT是因为appEventStrings[]把APP_READ_RPA_EVT和APP_PERIODIC_EVT顺序搞错了;
本应该是 appEventStrings[7] = " APP_READ_RPA_EVT " ,appEventStrings[6] = " APP_PERIODIC_EVT " ,
所以实际上启动的是读取RPA的定时器。
我用的SDK版本是simplelink_cc13xx_cc26xx_sdk_7_10_00_98->simple_peripheral_CC26X2R1_LAUNCHXL_tirtos7_ticlang;
谢谢!
,
Galaxy Yue:
非常感谢您的反馈