TI中文支持网
TI专业的中文技术问题搜集分享网站

CC1310 RF命令问题

我将发送和接收命令合为一个命令链,RF_cmdPropTxAdv->pNextOp = (rfc_radioOp_t *)&RF_cmdPropRx;

RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropTxAdv, RF_PriorityNormal, radioCallback, 0);

当接收到串口数据时,透传出去然后会切换到持续接收状态。带来的问题是:我第一次发没什么问题,当我第二次发的时候由于接收命令一直在执行,所以发送不能进行,我知道需要删除当前的RF命令。但是RF_cancelCmd(RF_Handle h, RF_CmdHandle ch, uint8_t mode);貌似需要RF_CmdHandle参数,但是runcmd不能返回该参数。在命令链方式下 用pendcmd或postcmd怎么解决这个问题呢? (不需要链接资料哦都有)

Alvin Chen:

回复 Alvin Chen:

此外下面的帖子和你的功能几乎一样有参考价值:
e2e.ti.com/…/1982650

user4959119:

回复 Alvin Chen:

经过应用对异步同步命令执行现在有点了解了。但还有几个疑问:
1.如果我用命令链的方式把TX和RX绑定,当用postcmd(TX_command)时,会把两个命令同时发布出去?
2.如果要用RF_cancelCmd或RF_flushCmd删除命令,那么是不是必须执行单个命令而命令链不适用了?

Alvin Chen:

回复 user4959119:

据我所知postcmd只能post一个一个command出去,你必须要执行单独命令先abort

Post an RF operation (chain) to the command queue Post an RF_Op to the RF command queue of the client with handle h. The command can be the first in a chain of RF operations or a standalone RF operation. If a chain of operations are posted they are treated atomically, i.e. either all or none of the chained operations are run. All operations must be posted in strictly increasing chronological order. Function returns immediately.

user4959119:

回复 Alvin Chen:

嗯。在参考例程代码时,发现在判断event方面老是有两种方式

1.在任务中
// Wait for Command to completeRF_EventMask result = RF_pendCmd(rfHandle, cmdHdl, EASYLINK_RF_EVENT_MASK);
if (result & RF_EventLastCmdDone){status = EasyLink_Status_Success;}
2.在中断中
static void radioCallback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e)
{if((e & RF_EventCmdDone) && !(e & RF_EventLastCmdDone)){/* Successful TX *//* Toggle LED1, clear LED2 to indicate TX */}
}

这两种方式的目的肯定是一样的,但是我觉得有中断了就没必要在轮询这个事件了。如果同时存在两种代码谁先执行呢?

Alvin Chen:

回复 user4959119:

应该是call back 没有深究过

user4959119:

回复 Alvin Chen:

嗯,最后一问 对于阻塞模式下的uart_write(),如果一个任务正在打印数据,此时另一个任务也要打印,这会造成冲突,RTOS里面有处理吗?或者我自己怎么处理?见过用tKey = Task_disable();的。

Alvin Chen:

回复 user4959119:

UART 不会有yield的选项,必须要传输完成之后其他task才能使用。

user4959119:

回复 Alvin Chen:

got it !

赞(0)
未经允许不得转载:TI中文支持网 » CC1310 RF命令问题
分享到: 更多 (0)