我的程序是基于rfPacketRx例程上修改的,工程师提供的收发切换是基于easylink的程序,因此不是很适用于我的代码。
我的程序整体逻辑为,板子先处于接收状态,接收到无线数据后,切换为发送模式发送数据。目前接收数据正常,但是在调用 RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropTx,RF_PriorityNormal, NULL, 0);将模式切换为发送模式发送数据包时,程序会意外复位,复位后又处于接收模式,若接收到数据后又会意外复位,如此循环,且无法切换到发送模式发送数据。
我目前只是想知道,以我下图的切换方式,将接收切换为发送是否是合理的
Viki Shi:
rfPacket上进行TX/RX切换的一般做法是,收到数据包后,添加逻辑以运行Tx命令。这部分可参考rfPacketTX,或者通过合并rfPacketTX中的任务来创建新的TX任务。 然后在RX回调函数中触发TX任务(使用信号量post)。 需要注意的一点是,rfPacketRX默认设置为在RX模式下重复运行。 你需要修改如下代码使其不再重复:
RF_cmdPropRx.pktConf.bRepeatOk = 1; //从1更改为0
RF_cmdPropRx.pktConf.bRepeatNok = 1; //从1更改为0
Xinxin:
回复 Viki Shi:
感谢你的回答,但是我依然还有疑问:
1. 上图这个函数即为接收到数据包后,调用的函数,在这个函数中切换为发送模式,我的逻辑为在接收到数据包后切换为发送,发送完后,又继续一直处于接收状态,如此循环,因此我认为RF_cmdPropRx.pktConf.bRepeatOk = 1;RF_cmdPropRx.pktConf.bRepeatNok = 1; 这样的配置是必要的,不需要改为0,这个理解正确吗?
2.如1所说,我没有开启两个任务,而是只在一个任务中当接收到特定数据后实现的收发切换,只以一个任务来实现此功能是合理的吗?
Viki Shi:
回复 Xinxin:
附上个实现切换的代码吧,基于rfPacket
rfPacketRxTX.c