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] [June 2017 Threads] Task switching does not work without osDelay in loopPosted by erikclaij on June 13, 2017 Hi,
In this simple example, I have created a task where I start a Timer (for a blinking LED). After the timer is running a start the endless loop. The LED will only blink if I include the osDelay(1) function in it.
Am I missing something?
Best,
Erik
~~~
void ControlCenter(void const *argument)
{
osTimerId activityLedID;
osTimerDef(activityLed, ActivityLed);
activityLedID = osTimerCreate(osTimer(activityLed), osTimerPeriodic, NULL);
osTimerStart(activityLedID, 20UL);
while(1)
{
osDelay(1); // Why do I need this ????
}
}
~~~
Task switching does not work without osDelay in loopPosted by hs2sf on June 13, 2017 Check your task prio vs. configTIMERTASKPRIORITY.
Seems that your task starves the timer task due to running at higher prio than the timer service. The delay puts your task in blocked state and allows the timer task to run for a while.
You should block your task(s) somehow (waiting for an event) to avoid hogging the CPU doing nothing.
Task switching does not work without osDelay in loopPosted by richard_damon on June 14, 2017 Another posibility is that you have configured FreeRTOS to not use preemption, in which case the loop needs some call that allows FreeRTOS to preempt the task.
Also, there is no reason for a user task to just have a while(1) {} loop, a task should only use the CPU when it has something to do, and when it doesn't, it should block till it has something (or exit if it is totally done).
Task switching does not work without osDelay in loopPosted by erikclaij on June 15, 2017 Thanks, it was indeed a prio problem.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|