FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [November 2009 Threads] Special use of vTaskDelayUntil()Posted by Mathias Zenger on November 30, 2009 Hi,
Normally vTaskDelayUntil() is used where you want to execute your task periodically with a fixed frequency. I want to run my task with a frequency of 50Hz as long as two global values are different. Then the task is blocking on a queue waiting for a command.
My problem: When executing my code like shown below I sometimes get a strange behaviour. The inner while loop which shall be executed with 50Hz repeats much too fast without any delay.
My question: When using vTaskDelayUntil() in this context the single initialization prior to the first while loop does not seem to be sufficient. Must I call xTaskGetTickCount() every time I enter the inner while loop?
Snippet:
static portTASK_FUNCTION(vSampleTask, pvParameters) { portBASE_TYPE xRes; xTasksvTypeCommand xCmdIn; portTickType xLastWakeTime; // Initialize with current tick count xLastWakeTime = xTaskGetTickCount(); // Task loop while (1) { while (global_a != global_b) { // Do some periodic action // ... vTaskDelayUntil(&xLastWakeTime, 20 / portTICK_RATE_MS); } // Block until any command has been written to the task command queue xRes = xQueueReceive(xCommandQueue, &xCmdIn, portMAX_DELAY); if (xRes == pdPASS) { // Process command // ... } } }
Thank you for your comments! Regards
RE: Special use of vTaskDelayUntil()Posted by Dave on November 30, 2009 You must re-init xLastWakeTime after you unblock from the queue.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|