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.

[参考译文] RTOS/AWR1443BOOST:无法在 MMW 演示代码中使用 Task_sleep()函数

Guru**** 2578945 points


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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/620095/rtos-awr1443boost-not-being-able-to-use-task_sleep-function-in-the-mmw-demo-code

器件型号:AWR1443BOOST

工具/软件:TI-RTOS

您好!

我最近修改了 MMW 演示代码、以便当物体在距离雷达0.5m 的距离内时、外部 LED 会亮起。 我希望实现某种延迟功能、以使 LED 保持开启2秒。 不幸的是,我无法使用 Task_sleep(),因为它一直给我一个错误。 我认为这是因为它会干扰雷达在延迟有效时收集信息的能力。 是否有其他方法可以在不干扰 CPU 的情况下延迟函数。 请提供任何帮助。

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的 Task_sleep (2)是否在演示的当前任务之一内? 您可能需要创建单独的任务。 如果您尝试休眠现有的 Ctrl 或 Data 任务、我相信它会关闭 MSS 和 BSS 之间的链接。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,我的 task_sleep()位于我的 mmWave_initTask 中,由于上述原因,它将不起作用。 还有一个原因是、当我将 GPIO 功能放在与 main.c 不同的 c 文件中的单独函数中时、LED 会延迟关闭

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

    一旦雷达处理开始、就不再调用初始化任务、因此我认为这不起作用。  为了避免时序问题、我建议创建两个全局变量:a) LED 状态变量(开/关)和 b)帧计数器。  您知道帧速率(每秒)。  当您打开 LED 时、请计数2秒的帧并将其关闭。

     Dave

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

    您好!

    感谢您的回复。 我想知道我是否可以使用 Clock_start()等时钟 API,或者使用计时器 API? 这是因为我对帧方法有点困惑。 如果我的 fps 值是30、那么我将要计数60帧。 但是、使用 for 循环来计数60帧肯定与计数2秒的帧不一样、因为代码对60的计数要快得多。

    谢谢

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

    其目的不是通过执行循环来阻止线性调频脉冲处理。  您可以利用的线性调频脉冲和帧事件已经存在-您只需向其中添加代码即可。  例如,在 MMW 演示中,查找函数 MmwDemo_frameStartIntHandler()。  这里已经有一个调试帧计数器。

    此外、CLI 传递的帧速率为几毫秒。  因此 fps = 1000/ FRAME_RATE。  您可能已经意识到这一点。

     Dave

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

    您好、Dave、

    我已经尝试了帧计数方法、它确实会延迟 LED、但 LED 会在延迟时闪烁。 我想知道您能否让我快速了解原因。 函数帧计数器在您提到的调试帧计数器之后被直接调用、以便它能够以适当的速度对帧进行计数。 我觉得这可能是我在 MmwDemo_frameStartIntHandler()中调用 FrameCounter 的问题。 但是、这是唯一允许我重置 frameCnt 变量的方法。

    void FrameCounter (void){
    
    if (High = 1){
    LED_ON;
    frameCnt++;
    if (frameCnt = 20){
    高电平= 0;
    }
    
    }
    否则{
    frameCnt = 0;
    LED_OFF;
    }
    }
    
    void GPIO_Fxn(){...
    
    
    if (Range=0.5){//如果对象太近,则将 framecounter 拉高并开始计数。
    
    高= 1;
    }
    
    } 

    感谢你的所有帮助

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此代码显示为每一帧打开或关闭 LED。 只有在 High 等于1时才会更改它的替代方法:

    如果(高==1)

    if (frameCnt =20)

    LED_OFF ();
    高电平= 0;
    frameCnt = 0;

    其他

    if (frameCnt=0)
    LED_ON();

    框架 Cnt ++;