Я думаю, что у меня либо а) неправильное понимание того, как работает функция FreeRTOS taskGetTickCount(), либо б) что-то не так с нашим портом.
У меня есть отладка, в которой я показываю вывод xTaskGetCount(). Каждый раз, когда я выполнял vTaskDelayUntil(), кажется, что он обновлен и актуален. Но если я сделаю ожидание вращения, ожидая увеличения, этого никогда не произойдет. Я думал, что прерывание срабатывало каждый тик, и увеличивал это значение. Но в данный момент я выполняю только одну задачу, поэтому, возможно, она достаточно умна, чтобы никогда не проверять перепланирование, а tickCount никогда не обновляется? Я буду очень признателен любому, кто может объяснить мне, как работает счетчик тиков FreeRTOS.
РЕДАКТИРОВАТЬ: Фрагмент образца:
void someTask(void * _)
{
portTickType now = xTaskGetTickCount();
for( ; xTaskGetTickCount() - now < 25; )
{
debug("%u", xTaskGetTickCount();
}
}
Это будет вращаться вечно, намного дольше 25 мс, подразумеваемых, когда тик = 1 мс. Вывод будет постоянно отображать одно и то же значение снова и снова. ЕСЛИ я добавлю vTaskDelay() в конец цикла, он будет правильно увеличиваться и в конечном итоге выпадет.