RF_runCmd函数是阻塞的,要怎么强制结束阻塞?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
该函数将一个射频操作命令或命令链附加到射频驱动器的命令队列中,然后等待它完成,未完成前不会返回
例程rfPacketTx中有使用这个API的例子,你可以参考它来使用
RF_runCmd()是阻塞调用,可换用 RF_postCmd()或者RF_scheduleCmd()。然后用RF_pendCmd() 来阻塞命令,【RF_runCmd()其实就是 post + pend】。
如果命令一直没有完成,就会卡在此处
硬件、软件都可能造成这个问题
硬件方面可能的原因是高频时钟可能没有起振,软件方面可能是其他的程序影响了这部分的执行,导致一直无法完成
RF_flushCmd | ( | RF_Handle | h, |
RF_CmdHandle | ch, | ||
uint8_t | mode | ||
) |
RF_CmdHandle 要怎么填写?RF_runCmd()不返回这个参数的?
Hi Genyi,
如您所知,RF_runCmd()是阻塞式API,也就是说命令未执行结束前不会返回,如同一个while循环,在结束前想通过其它API来强制结束是不可能的,因为它本身还在执行。
如Alex回复,建议用RF_postCmd()或者RF_scheduleCmd(),这样您可以通过RF_flushCmd()来中止执行。
另外您方便描述一下什么场景需要强行结束RF_runCmd()吗?如果是遇到异常情况导致RF_runCmd()没有正常退出的话,可以考虑用看门狗。
Best regards,
Shuyang
/* 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);