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.

[参考译文] CC1312R:具有专有项目的多任务函数

Guru**** 2540720 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1080291/cc1312r-multi-task-function-with-proprietary-project

部件号:CC1312R
“线程:测试”中讨论的其它部件

您好,

我们尝试使用多任务函数来确保函数可以实时工作。 我的设置如下所示

任务1:使用无线电项目句柄 RX 唤醒,唤醒间隔:2秒

任务2:在 WOR 项目中添加文件,发送 TX 数据或切换 LED,应用后休眠500毫秒

按照我的预期,TX 每500毫秒发送一次,但它每2秒发送一次。 看起来它是由唤醒时间间隔控制的。

如果我希望多任务工作分开,我应该怎么做? 我提供了我的示例代码供您参考。 您可以使用 LAUNCHXLCC1312R1对其进行测试

e2e.ti.com/.../rfWakeOnRadioRx_5F00_CC1312R1_5F00_LAUNCHXL_5F00_tirtos_5F00_ccs.zip

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

    我建议在一项任务中完成所有的广播任务。 如果实际有数据包在空中并且您不仅在嗅探,则您可能会发现对讲机处于 RX 模式,正在查找数据包的时间超过2毫秒,此时您无法传输任何内容。

    例如,您可以执行以下操作:

        /* Save the current radio time */
        RF_cmdPropRxSniff.startTime = RF_getCurrentTime();
    
        /* Enter main loop */
        while(1)
        {
            /* Set next wakeup time in the future */
            RF_cmdPropRxSniff.startTime += WOR_WAKE_UP_INTERVAL_RAT_TICKS(WOR_WAKEUPS_PER_SECOND);
    
            /* Schedule RX */
            RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropRxSniff, RF_PriorityNormal, &callback, RF_EventRxEntryDone);
    
            /* Log RX_SNIFF status */
            switch(RF_cmdPropRxSniff.status) {
                case PROP_DONE_IDLE:
                    /* Idle based on RSSI */
                    worStatistics.doneIdle++;
                    break;
                case PROP_DONE_IDLETIMEOUT:
                    /* Idle based on PQT */
                    worStatistics.doneIdleTimeout++;
                    break;
                case PROP_DONE_RXTIMEOUT:
                    /* Got valid preamble on the air, but did not find sync word */
                    worStatistics.doneRxTimeout++;
                    break;
                case PROP_DONE_OK:
                    /* Received packet */
                    worStatistics.doneOk++;
                    break;
                default:
                    /* Unhandled status */
                    break;
            };
    
            RF_cmdPropTx.startTime = RF_cmdPropRxSniff.startTime + (uint32_t)(4000000*.25f);
            RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropTx, RF_PriorityNormal, NULL, 0);
    
            RF_cmdPropTx.startTime = RF_cmdPropRxSniff.startTime + (uint32_t)(4000000*.75f);
            RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropTx, RF_PriorityNormal, NULL, 0);
    
            RF_cmdPropTx.startTime = RF_cmdPropRxSniff.startTime + (uint32_t)(4000000*1.25f);
            RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropTx, RF_PriorityNormal, NULL, 0);
    
            RF_cmdPropTx.startTime = RF_cmdPropRxSniff.startTime + (uint32_t)(4000000*1.75f);
            RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropTx, RF_PriorityNormal, NULL, 0);
        }
    }

    这将每2秒嗅探一次,每500毫秒发射一次。 如果数据包实际接收且对讲机长时间处于 RX 状态,则数据包将在之后立即发送,因为 PastTrig 设置为1,因此您可能需要在收到数据包时调整时间。

    巴西

    西里