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
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.
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.