FreeRTOS Arduino MEGA 2560 vTaskDelay () не работает - PullRequest
0 голосов
/ 27 февраля 2020

У меня Arduino MEGA 2560, на котором выполняется эскиз FreeRTOS с использованием Arduino_FreeRtos. Кажется, все работает правильно, кроме функций 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 секунду, а затем останавливается.

У меня действительно включен INCLUDE_vTaskDelay в файле FreeRTOSConfig.h. enter image description here

Что еще я могу посмотреть, чтобы попытаться выяснить, почему vTaskDelay не работает?


Ниже приведено определение часов. За комментарий, что часы могут быть не правильными. Я не могу расшифровать, если часы правильные или нет. Надеюсь, кто-то может указать, если этот параметр может быть причиной проблемы. enter image description here

1 Ответ

0 голосов
/ 28 февраля 2020

Я думаю, что проблема в том, что 128000 >> (portUSE_WDTO + 11), вероятно, 0 (если только portUSE_WDTO не является отрицательным). Чтобы получить правильное время, вам необходимо убедиться, что частота тиков соответствует ожидаемой (30 мс). На данный момент это вряд ли так.

...