请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC1310 工具/软件:
我有一个带有 cc1310的设备、它在2次事件中将信号传输到另一个设备。 一个事件是检测到汽车时、另一个事件是每7秒触发一次的计时器、以提醒接收器设备其状态。 为了进行传输、我在两个事件中都使用以下函数:
static bool rf_send(const uint8_t data, rf_cmd_t cmd, RF_t *ack_payload) {
if (!device.is_joined && cmd != RF_CMD_JOIN) return false;
memcpy(&tx_payload.dst_addr, filter_address, sizeof(tx_payload.dst_addr));
// tx_payload.dst_addr = *(uint64_t *)filter_address;
tx_payload.cmd = cmd;
tx_payload.data.raw = data;
// Send packet with listen before talk
#if ACK_MODE == true
RF_EventMask terminationReason = RF_runCmd(rf_handle, (RF_Op*) &RF_cmdNop, RF_PriorityNormal,
rf_tx_done_cb, (RF_EventCmdDone | RF_EventRxEntryDone | RF_EventLastCmdDone));
#else
RF_EventMask terminationReason = RF_runCmd(rf_handle, (RF_Op*) &RF_cmdPropTx, RF_PriorityNormal, NULL, 0);
#endif
// Command status
uint32_t cmdStatus = ((volatile RF_Op*) &RF_cmdPropTx)->status;
uint32_t cmdRXStatus = ((volatile RF_Op*) &RF_cmdPropRxAdv)->status;
// Reset status
RF_cmdNop.status = IDLE;
RF_cmdPropCs.status = IDLE;
RF_cmdCountBranch.status = IDLE;
RF_cmdPropTx.status = IDLE;
RF_cmdPropRxAdv.status = IDLE;
RF_cmdCountBranch.counter = CS_RETRIES_WHEN_BUSY;
// If command terminate OK
if (cmdStatus == PROP_DONE_OK && cmdRXStatus == PROP_DONE_OK && terminationReason == RF_EventLastCmdDone) {
// If packet is from the type ACK
if (rx_payload.cmd != RF_CMD_ACK) {
return false;
}
*ack_payload = rx_payload;
return true;
}
return false;
}
在7秒周期事件中调用函数时、它运行没有错误、当调用检测时、它会卡在 RF_runCmd、但会发送信号。 什么会导致此行为?