Realtime capabilities of rtos - atmega128

nobody wrote on Sunday, January 30, 2005:


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.

Adi Schwarz