Part Number:CC1310
RF_runCmd函数是阻塞的,要怎么强制结束阻塞?
Alex Zhang:
您好,已经跟进您的问题,有更新会立即回复您
,
Alex Zhang:
该函数将一个射频操作命令或命令链附加到射频驱动器的命令队列中,然后等待它完成,未完成前不会返回
例程rfPacketTx中有使用这个API的例子,你可以参考它来使用
,
Alex Zhang:
https://e2echina.ti.com/support/wireless-connectivity/sub-1-ghz/f/sub-1-ghz-forum/210038/cc1310-cc1310-rfwakeonradiorx-rf_runcmd
您可以参考这样一个链接,希望可以帮助到您,
,
Alex Zhang:
RF_runCmd()是阻塞调用,可换用 RF_postCmd()或者RF_scheduleCmd()。然后用RF_pendCmd() 来阻塞命令,【RF_runCmd()其实就是 post + pend】。
如果命令一直没有完成,就会卡在此处
硬件、软件都可能造成这个问题
硬件方面可能的原因是高频时钟可能没有起振,软件方面可能是其他的程序影响了这部分的执行,导致一直无法完成
,
genyi liu:
RF_runCmd()调用后,可以用RF_flushCmd 函数来结束运行吗?
,
Alex Zhang:
如果你想在命令序列执行完成之前结束运行,你可以使用RF_flushCmd()函数。
,
genyi liu:
RF_flushCmd
(
RF_Handle
h,RF_CmdHandle
ch,uint8_t
mode)
RF_CmdHandle 要怎么填写?RF_runCmd()不返回这个参数的?
,
Alex Zhang:
已经跟进您的问题,谢谢。
,
Shuyang Zhong:
Hi Genyi,
如您所知,RF_runCmd()是阻塞式API,也就是说命令未执行结束前不会返回,如同一个while循环,在结束前想通过其它API来强制结束是不可能的,因为它本身还在执行。
如Alex回复,建议用RF_postCmd()或者RF_scheduleCmd(),这样您可以通过RF_flushCmd()来中止执行。
另外您方便描述一下什么场景需要强行结束RF_runCmd()吗?如果是遇到异常情况导致RF_runCmd()没有正常退出的话,可以考虑用看门狗。
Best regards,
Shuyang
,
genyi liu:
用户可以随时强行结束RF_runCmd()。
,
Alex Zhang:
如果您希望能够手动取消例如活动的 RX,则需要使用 RF_postCmd 而不是 RF_runCmd。
,
Alex Zhang:
/* Enter RX mode and stay forever in RX. pktConf.bRepeatOk and pktConf.bRepeatNok = 1 */ RF_CmdHandle rxHandle = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdPropRx, RF_PriorityNormal, &callback, RF_EventRxEntryDone);/* Wait for a button press */ Semaphore_pend(buttonSemaphoreHandle, BIOS_WAIT_FOREVER);/* Cancel the RX command */ RF_cancelCmd(rfHandle, rxHandle, 0);