请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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、但会发送信号。 什么会导致此行为?