你好!
我非常接近于拥有基于 rfSynchronizedPacket 的可靠 FDMA 系统。
我首先用5ms 的时隙包装 TDMA、现在我要添加 FDMA。
我的问题是 、5毫秒的时间间隔是否太短、无法经常对这些内容进行重新调优?
尝试在时隙之间重新调整无线电时、
我注意到、状态机似乎在4个"保存"设备和1个每50ms 重新同步一次的"主"设备之间随机锁定。
我可以告诉它的状态机、因为其他任务正在运行、它们永远不会像没有计划数据包 RX 那样超时。
直到我开始在每个时隙之间调用 RF_cmdF 时、才会发生这种情况。
仅 TDMA 的解决方案已连续运行5天、没有超时。
FDMA 解决方案是绝对的填充、在各个方向传输了数百到数千个成功数据包后、我将失去与从器件的同步。
我还更改了在运行 RF_cmdF 后检查结果的方式。
我被旧的 if()语句卷入陷阱,并将其更改为 while (),它不再被挂起。
该示例中的文档使其听起来像是驱动程序重新运行此设置。 这是否包括 CmdFS? 这是仅用于 TX 还是也用于 RX?
* Then the RF driver will power-up the RF core, re-synchronise the RAT and re-run the setup procedure.* The setup procedure includes RF_cmdPropRadioDivSetup and RF_cmdFs_2gfsk250kbps_0 from above.
ifdef FDMA
rf_ctx.rf_cmdfs->frequency = task.chFreq;
rf_ctx.rf_cmdPropRadioDivSetup->centerFreq = task.chFreq; //是否需要?
radio_set_freq (task.chFreq);
#endif
void radio_set_freq (uint16_t f){
rf_ctx.rf_cmdfs->frequency = f;
rf_ctx.rf_cmdPropRadioDivSetup->centerFreq = f;
// TODO 加小数
/*设置频率。 现在、射频驱动器为射频内核加电并运行上述设置命令。
*执行 FS 命令,并在射频驱动程序执行自动操作时缓存以供以后使用
*加电。 *
RF_EventMask 结果= RF_runCmd (rfHandle、(RF_OP*) RF_ctx.RF_cmdF、RF_PriorityNormal、NULL、0);
while (((result!= RF_EventLastCmdDone)&&(volatile RF_OP*) RF_ctx.RF_cmdfs)->status != DONE_OK)
{
// while (1);
}
}