请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:LAUNCHTXL-CC1310 我正在尝试将"先听后说"示例集成到简单链接中。
我更改 了EasyLink_Transmit,但我的代码总是在 RF_pendCmd上挂起。
有什么想法是我做错了什么或者为什么会挂起?
#define CS_retries_when占线10. /*当信道繁忙时CS命令应运行的次数*/ #define RSSI_THRESHOLD_DBM -90 /*报告信道繁忙时RSSI高于此阈值*/ #define idle_Time_US 5000 静态RFC_CMD_NOP_t EasyLink _cmdNop; 静态RFC_CMD_PROP_CS_t EasyLink _cmdPropcs; 静态RFC_CMD_COUNT_BRANC_t EasyLink _cmdCountBranch; EasyLink_Status EasyLink_Transmit(EasyLink TxPacket *txPacket) { EasyLink状态= EasyLink状态Tx错误; 如果(!已配置)||暂挂) { 返回EasyLink_Status_Config_Error; } //检查并选择busyMutex IF (semaphore_pend(busyMutex, 0)== false) { 返回EasyLink Status_Busy_Error; } IF (txPacket->len > EasyLink _MAX_DATA_length) { 返回EasyLink_Status_Param_Error; } memcpy(TxBuffer, txPacket->dstAddr, addrSize); memcpy(txBuffer + addrSize, txPacket->payload,txPacket->len); //发送到Tx的数据包长度包括地址 EasyLink _cmdProptx.pktLen = txPacket->len + addrSize; EasyLink_cmdProptx.pktt = txBuffer; 如果(txPacket->absTime!= 0) { EasyLink _cmdNop.startrigger.triggerType = trig_ABSTIME; EasyLink _cmdNop.startrigger.PastTrig =1; EasyLink _cmdNop.StartTime = txPacket->absTime; // EasyLink_cmdPropTx.startrigger.triggerType = trig_ABSTIME; // EasyLink _cmdPropTx.startrigger.PastTrig = 1; // EasyLink_cmdPropTx.StartTime = txPacket->absTime; } 否则 { EasyLink _cmdNop.startrigger.triggerType = trig_ABSTIME; EasyLink _cmdNop.startrigger.PastTrig =1; EasyLink _cmdNop.StartTime = RF_getCurrentTime()+(5000); // EasyLink _cmdPropTx.startrigger.triggerType = trig_now; // EasyLink _cmdPropTx.startrigger.PastTrig = 1; // EasyLink_cmdPropTx.StartTime =0; } /*设置命令链的下一个指针*/ EasyLink_cmdNop.pNextOp =(RFC_radioOp_t*)&EasyLink_cmdPropCs; EasyLink_cmdPropcs.pNextOp =(RFC_radioOp_t*)&EasyLink_cmdCountBranch; EasyLink_cmdCountBranch.pNextOp =(RFC_radioOp_t*)&EasyLink_cmdPropTx; EasyLink_cmdCountBranch.pNextOpIfOk =(RFC_radioOp_t*)&EasyLink_cmdPropCs; /*使用特定于应用程序的定义*/自定义API命令 EasyLink_cmdPropCs.rssiThr = RSSI_THRESHOLD_DBM; EasyLink _cmdPropcs.csEndTime =(idle_Time_US + 150)* 4;/*添加一些边距*/ EasyLink_cmdCountBranch.counter = CS_retries_when繁忙; //发送数据包 RF_CmdHandle cmdHdl = RF_postCmd (rfHandle,(RF_Op*)&EasyLink_cmdNop, RF_PriorityNormal,0,EasyLink_RF_event_mask); //等待命令完成 RF_EventMask结果= RF_PendCmd (rfHandle,cmdHdl,(RF_EventLastCmdDone |) RF_EventCmdError); //如果(结果和RF_EventLastCmdDone) 如果(Result & RF_EventLastCmdDone)&&(EasyLink_cmdPropTx.status == PROP_DOLE_OK) { 状态= EasyLink_Status_Success ;} //释放busyMutex semaphore_post(BusyMutex); 返回状态; }