您好,
我使用『EasyLink_receiveAsync』创建与其他cc2650一起发送和接收的程序。
每个程序使用"时钟功能"在80毫秒内发送和接收。
(如果无法及时启动,则从发送器端重新启动程序)(看门狗计时器)
但是,接收器会不时忽略看门狗计时器,并在运行RF_postCmd后继续停止。
(每5分钟发生一次)
这是由于EasyLink接收器异步中的设置,还是由于RF_EventMask设置…不足?
在以前的程序中不会发生此问题,并且感觉在使用以下触发器后出现了问题。
但是,timestamp.EndTime设置为绝对适合在80ms内的时间。
如果有人知道,您能告诉我吗?
Lina
//Stert trigger
EasyLink_cmdPropRxAdv.startTrigger.triggerType = TRIG_NOW;
EasyLink_cmdPropRxAdv.startTrigger.pastTrig = 1;
EasyLink_cmdPropRxAdv.startTime = 0;
//End trigger
EasyLink_cmdPropRxAdv.endTrigger.triggerType = TRIG_ABSTIME;
EasyLink_cmdPropRxAdv.endTime = TimeStamp.EndTime;
EasyLink_Status EasyLink_receiveAsync(EasyLink_Cb cb,EasyLink_txPacket *txPacket,EasyLink_TimeStamp TimeStamp)
{
EasyLink_Status status = EasyLink_Status_Rx_Error;
rfc_dataEntryGeneral_t *pDataEntry;
if ( (!configured) || suspended)
{
return EasyLink_Status_Config_Error;
}
if ( (Semaphore_pend(busyMutex, 0) == FALSE) || (EasyLink_CmdHandle_isValid(asyncCmdHndl)) )
{
return EasyLink_Status_Busy_Error;
}
CBrxCb = cb;
pDataEntry = (rfc_dataEntryGeneral_t*) rxBuffer;
pDataEntry->length = 1 + EASYLINK_MAX_ADDR_SIZE + EASYLINK_MAX_DATA_LENGTH;
pDataEntry->status = 0;
dataQueue.pCurrEntry = (uint8_t*) pDataEntry;
dataQueue.pLastEntry = NULL;
EasyLink_cmdPropRxAdv.pQueue = &dataQueue; /* Set the Data Entity queue for received data */
EasyLink_cmdPropRxAdv.pOutput = (uint8_t*)&rxStatistics;
//Stert trigger
EasyLink_cmdPropRxAdv.startTrigger.triggerType = TRIG_NOW;
EasyLink_cmdPropRxAdv.startTrigger.pastTrig = 1;
EasyLink_cmdPropRxAdv.startTime = 0;
//End trigger
EasyLink_cmdPropRxAdv.endTrigger.triggerType = TRIG_ABSTIME;
EasyLink_cmdPropRxAdv.endTime = TimeStamp.EndTime;
//Clear the Rx statistics structure
memset(&rxStatistics, 0, sizeof(rfc_propRxOutput_t));
asyncCmdHndl =RF_postCmd(rfHandle, (RF_Op*)&EasyLink_cmdPropRxAdv,
RF_PriorityNormal, rxDoneCallback, EASYLINK_RF_EVENT_MASK);
if (EasyLink_CmdHandle_isValid(asyncCmdHndl))
{
status = EasyLink_Status_Success;
}
return status;
}
/* Create Clock event */
Clock_Params clkParams;
Clock_Params_init(&clkParams);
clkParams.period =100*80/*ms*/;
clkParams.startFlag = FALSE;
Clock_construct(&functionClock, (Clock_FuncPtr)Tasksort,1000, &clkParams);
functionClockHandle =Clock_handle(&functionClock);