This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2650:您发送的程序将忽略时钟功能(看门狗计时器)并继续停止

Guru**** 2560390 points
Other Parts Discussed in Thread: CC2650

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1093885/cc2650-the-program-you-are-sending-ignores-the-clock-function-watchdog-timer-and-continues-to-stop

部件号:CC2650

您好,

我使用『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);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨,Lina,

    你能告诉我你的看门狗回叫吗?
    您还能告诉我您传递到结束触发器结束时间的值吗?

    此致,

    AB

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨,AB,

    感谢您的回复!
    是否是监视计时器定期运行的日志?
    例如,我将包含我正在使用TeraTerm监控的日志。
    此程序将永远重复10槽,如果7槽孔眼中有接收到的数据,则将接收,如果没有,则中止。

    此时,它将继续停止而不移动到下一个插槽。(错误log参照)
    ・EndTime已更改为在插槽开始时输出。(usprintf_mng ("EndTime:%d\n",ClockTime.EndTime/4000);)
    ・前面显示asyncCmdHndl RF_postCmd。

    usprintf_mng("asyncCmdHndl\n");
    
    asyncCmdHndl =RF_postCmd(rfHandle, (RF_Op*)&EasyLink_cmdPropRxAdv,
    RF_PriorityNormal, rxDoneCallback_CReq, EASYLINK_RF_EVENT_MASK);


    我想知道为什么在运行RF_postCmd后计时器不工作。
    RF_postCmd接收到某种类型的信号,它是否仍然存在问题??
    (冻结在时隙中,没有接收任何内容的计划)
    (您是否正在接收其他信号??)
    我想制作一个程序,如果它在固定的时间不能接收它,就会清除它。
    有人有好主意吗??

    //error log
    
    7[31207ms]10
    EndTime:31277
    asyncCmdHndl
    Status:7 Req[31277ms]:abort
    Status7 10
    
    8[31287ms]10
    No act
    
    9[31367ms]10
    No act
    
    0[31927ms]10
    No act
    
    1[32007ms]10
    No act
    
    2[32087ms]10
    No act
    
    3[32167ms]10
    No act
    
    4[32247ms]10
    No act
    
    5[32327ms]10
    No act
    
    6[32407ms]10
    No act
    
    7[32487ms]10
    EndTime:32557
    asyncCmdHndl
    
    
    
    
    
    
    //↑Freeze in this state
    
    //↓Normal log ('Receive' if there is incoming data, or 'abort' if not)
    
    
    7[492ms]10
    EndTime:562
    asyncCmdHndl
    Status:7 ReCReq[562ms]:abort
    Status7 10
    
    8[572ms]10
    No act
    
    9[652ms]10
    No act
    
    0[1212ms]10
    No act
    
    1[1292ms]10
    No act
    
    2[1372ms]10
    No act
    
    3[1452ms]10
    No act
    
    4[1532ms]10
    No act
    
    5[1612ms]10
    No act
    
    6[1692ms]10
    No act
    
    7[1771ms]10
    EndTime:1841
    asyncCmdHndl
    Receve :dd 02 00 30 00 08 00 00 00 00 00 00 00 00
    Status:0 Req[1784ms]:ok
    Status0 10
    Trans:04 00 00 02 dd aa 00
    
    8[1851ms]10
    No act

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨,Lina,

    我不理解问题是什么。

    我有几个问题。

    “在RF_postCmd后计时器不工作”是什么意思? 我看到您收到了一个数据包,并且插槽8也执行了。 根据您发送给我的日志,它似乎工作正常。

    是否要RF_postCmd连续接收或仅接收1个数据包?

    此致,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨,AB,

    此程序最初作为成功的发送和接收操作工作。
    但在五分钟内,它突然冻结。

    计时器不工作,并在RF_postCmd处停止。
    顺便说一下,数据包完全到达而不会丢失,直到它停止为止。

    很抱歉我没有说得够清楚。…