TI中文支持网
TI专业的中文技术问题搜集分享网站

LAUNCHXL-CC26X2R1: 关于simple_peripheral周期事件问题

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:

非常感谢您的反馈

赞(0)
未经允许不得转载:TI中文支持网 » LAUNCHXL-CC26X2R1: 关于simple_peripheral周期事件问题
分享到: 更多 (0)