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.

[参考译文] CC1352R:传感器控制器停止/启动任务。

Guru**** 2552370 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1029255/cc1352r-sensor-controller-stop-start-tasks

器件型号:CC1352R

您好!

芯片1352R。

问题:

启动两个传感器控制器任务后、应用程序会尝试动态停止/启动此任务。

当停止任务被执行时、返回值为0。

代码:

操作

结果= scifWaitOnNbl (20000);

while (结果!= SCIF_SUCCESS);

结果= scifStopTasksNbl (1 << scif_im加速器_验证_任务_ ID);
if (结果!= SCIF_SUCCESS)

//错误。
//...

使用  SCIF_SUCCESS 停止任务退出

大约1秒后。 代码尝试使用以下命令启动任务:

操作

结果= scifWaitOnNbl (20000);

while (结果!= SCIF_SUCCESS);

结果= scifStartTasksNbl (1 << scif_hall_sensor_verification_task_ID);
if (结果!= SCIF_SUCCESS)

//错误。
//...

 scifStartTasksNbl 之后的结果为:

结果= 2;// SCIF_ILLEGAL_OPERATION

在这种情况下、任务未启动(使用真实测试-模块不工作)

这意味着任务已正确停止。

 

这种行为的原因可能是什么。

此致、

Ilian

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

    您能给我一个小示例吗、以便我可以重新创建您正在做的工作吗?

    除了切换 LED 外、这两个任务不必执行任何其他操作。

    BR

    Siri

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

    您好!

    现在很难使项目变得简单。

    准确的传感器控制器项目是否进行了正确的测试?

    此致、

    Ilian

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

    如果您有一些可以共享的内容、使我们能够调试 LP 上的问题、请执行此操作。 如果您不在论坛上分享该项目、请向我发送朋友申请、您可以与我私下分享。

    BR

    Siri

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

    你(们)好

    这些问题与不重置指定任务的任务数据结构有关。 必须在重新启动任务之前调用 scifResetTaskStruts。

    result = scifStopTasksNbl(1 << SCIF_HALL_SENSOR_VERIFICATION_TASK_ID);
    if (result != SCIF_SUCCESS)
    {
        // Error.
        // ...
        while(1);
    }
    
    do
    {
        result = scifWaitOnNbl(20000);
    }
    while(result != SCIF_SUCCESS);
    
    scifResetTaskStructs(1 << SCIF_HALL_SENSOR_VERIFICATION_TASK_ID, 0);
    
    result = scifStartTasksNbl(1 << SCIF_HALL_SENSOR_VERIFICATION_TASK_ID);
    if (result != SCIF_SUCCESS)
    {
        // Error.
        // ...
        while(1);
    }
    

    避免执行此操作将导致重新启动任务失败(来自 scif_framework.c):

    static SCIF_RESULT_T scifCtrlTasksNbl(uint32_t bvTaskIds, uint32_t bvTaskReq) {
    
        // Prevent interruptions by concurrent scifCtrlTasksNbl() calls
        if (!osalLockCtrlTaskNbl()) {
            return SCIF_NOT_READY;
        }
    
        // Perform sanity checks: Starting already active or dirty tasks is illegal
        if (bvTaskReq & 0x01) {
            if ((scifData.pTaskCtrl->bvActiveTasks | scifData.bvDirtyTasks) & bvTaskIds) {
                osalUnlockCtrlTaskNbl();
                return SCIF_ILLEGAL_OPERATION; // You will end up here
            }
        }

    BR

    Siri

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

    您好、Siri、

    谢谢!

    我将在重新开始任务之前添加任务结构的重新启动。

    此致、

    Ilian