请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号: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);
返回状态;
}