【问题标题】:FreeRTOS Arduino MEGA 2560 vTaskDelay() not workingFreeRTOS Arduino MEGA 2560 vTaskDelay() 不工作
【发布时间】:2020-02-26 21:30:55
【问题描述】:

我有一个使用 Arduino_FreeRtos 运行 FreeRTOS 草图的 Arduino MEGA 2560。除了 vTaskDelay 函数外,一切似乎都正常工作。以下是我遇到问题的领域之一。

    taskENTER_CRITICAL();
    MOTORS[5].motor(1, 120);
    MOTORS[6].motor(1, 127);
    taskEXIT_CRITICAL();
    vTaskDelay(pdMS_TO_TICKS(9000));
    taskENTER_CRITICAL();
    MOTORS[5].motor(1, 0);
    MOTORS[6].motor(1, 0);
    taskEXIT_CRITICAL();

第一个任务关键部分开始推动我的电机前进。应该有 9 秒的延迟,然后电机应该在第二个任务关键部分停止。实际发生的是电机向前移动约 1 秒然后停止。

我确实在 FreeRTOSConfig.h 文件中启用了 INCLUDE_vTaskDelay。

我还可以查看什么来尝试找出 vTaskDelay 不起作用的原因?


下面是时钟的定义。根据评论时钟可能不正确。我无法破译时钟是否正确。希望有人可以指出此设置是否可能导致问题。

【问题讨论】:

  • 我怀疑您没有以您期望的时钟频率运行。
  • @Realtime Rik:我添加了时钟的定义。你觉得这个定义有什么问题吗?

标签: arduino freertos


【解决方案1】:

我认为问题在于 128000 >> (portUSE_WDTO + 11) 可能为 0(除非 portUSE_WDTO 为负数)。 为了获得正确的时间,您需要检查滴答率是否符合预期(30 毫秒)。目前不太可能出现这种情况。

【讨论】: