Realtime capabilities of rtos – atmega128
Hi,
I played around with your OS a little bit and I like it – it is a compact neat OS. Anyway I think I have some problems with its performance.
I would like to use the OS for the non time-critical tasks of my application, the time-critical tasks should be handled by interrupts. The problem is that these interrupts should be serviced very quickly. So I spent some time with excessive performance-testing of the OS in the simulator. For that I adapted the demo application so that only the flash tasks and two more self made tasks were running.
I found out that a context switch from the system tick needs quite a lot calculation time – in my case about 540 cycles without switching tasks, and 2200 – 3000 cycles when it switches tasks. Also a queueSendFromISR takes about 330 cycles. For me this is a problem because during this time all interrupts are blocked. I can cope with 500 cycles without interrupts, but 2000 cycles are far too much.
I learned a lot from reading the source code, but anyway I did not understand the context switch procedure. I just found out that vTaskSwitchContext() takes quite long.
What tweaks do you know to reduce the time of blocked interrupts? I do not even need a fast context switch, but I really need my interrupts.
greets,
Adi Schwarz