This might seem like an odd question for a realtime OS, but is there a way to run realtime tasks in FreeRTOS?
I’ve been looking for a way to create, delete and switch tasks without running the FreeRTOS SysTick interrupt. That is to say, I want co-operative scheduling, with no RTOS task interruption. Plus the ability to pre-emptively switch, or kill, tasks, on external events (non-masked interrupts).
I’ve been looking into the tickless ability, and the different scheduling methods, but can’t find anything that fits the requirements.
Co-operative scheduling appears to do exactly this, but I can’t get it to run without the overhead of xPortSysTickHandler.
For background, I’m running an audio processing task (patch) which requires all available uC cycles to complete on time. I need it to run uninterrupted under normal use, with occasional USB events (processed by high-priority interrupts) that may stop and replace the current patch.
At the moment I have a patch management task which receives events through xTaskNotifyFromISR(). This works quite well, and the management thread is blocked while waiting for events, but it seems the overhead of running FreeRTOS (pre-emptive or cooperative) is still significant compared to bare bones.