Disable the scheduler giving a task full CPU

tjohansen wrote on Thursday, February 24, 2011:


Is it possible, from with in a task, to stop the scheduler to get full CPU time? After the task has been done, then enable the scheduler again?

I have a buzzer task, that is pulsing an output to make the buzzer sound. But the sound is a bit “uneven” because of the scheduler, taking time from my task. The output must be toggle every 1 ms


richard_damon wrote on Thursday, February 24, 2011:

You can use vTaskSuspendAll() / xTaskResumeAll() to do this, but is sounds like a better solution would be to either make the buzzer task the top priority task (so it will always run when it wants) or move the operation to an ISR on a 1ms timer interrupt.

My first guess is that you probably have FreeRTOS set up with a 1 ms basic timer tick, which is probably faster than you need it if you can set up a second timer interrupt at the 1 ms rate just for toggling this bit.

rtel wrote on Thursday, February 24, 2011:

Just to add to richard_damons reply.  If the tick interrupt is fast enough, you have the option of writing a tick hook function and having it done there. 

However, normally when I have used things like buzzers I have set up a peripheral (PWM, counter, whatever) to output a signal with the required frequency with no CPU processing required other than to turn it on, off, or change pitch.