Hi,
在使用CC1301launchpad验证wor时,接收端主mcu是定期发送命令使RF执行一次sniff检测空中信号,然后主mcu进入休眠了,使用该种模式的功耗是较低的,而发送端需要持续发送足够长时间的前导码来使RF能够在WOR醒来时检测到信号。
我使用的是nortos例程进行项目开发,只有一个线程可用。而例程WOR在执行一次sniff命令后MCU就进入了休眠,这使我无法添加执行其他任务。我在论坛里看到RF_runCmd()是一个阻塞调用,不会在整个WOR间隔内退出,这意味着整个应用程序仅被阻塞以处理该间隔,ti回复建议改成RF_postCmd,但我尝试了改成该种方法后,无法正常接收数据,请问该种建议是否有效?
请问我的理解是否有误?
现在接收端能否做成 RF始终持续在执行Sniff检测信号(按我理解该种方式检测信号,功耗较低,理解有错误请指出),接收端RF独立工作,主MCU休眠,当接收端RF检测到有效信号时再将MCU唤醒。如此发送端只需发送一包报文(使用rfPacketRx.c的发送方式)就能使接收端接收到报文,且使接收端功耗降到最低而不影响接收端其他任务运行。
请问该种方式是否可行,该如何做?
Best regards,
ln
Viki Shi:
RF_runCmd()是阻塞调用,你的情况,换用 RF_postCmd()或者RF_scheduleCmd()是合适的建议。然后用RF_pendCmd() 来阻塞命令【RF_runCmd()其实就是 post + pend】
我理解你的意思是想让RF core独立于主MCU进行数据包的嗅探,但是不行。WOR功能的实现是基于sniff命令软件实现的,也就是说你必须每次都处理“sniff command done”回调,去查看是否收到了WOR包,或者是否要调度新的sniff命令。
user4784951:
回复 Viki Shi:
Hi
非常感谢您的回复,请问将RF_runCmd()修改为RF_postCmd()然后再进行RF_pendCmd() 是如我一下修改这样吗?因为我只使用了RF_postCmd()替换RF_runCmd()就是无法收到数据了。
/* Schedule RX *///RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropRxSniff, RF_PriorityNormal, &callback, RF_EventRxEntryDone);
RF_postCmd(…);
/* My Code */
…… RF_pendCmd(…);
/* Log RX_SNIFF status */ switch(RF_cmdPropRxSniff.status) { case PROP_DONE_IDLE: /* Idle based on RSSI */ worStatistics.doneIdle++;…… };