Realtime capabilities of rtos - atmega128
Posted by Nobody/Anonymous on 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.
Copyright (C) 2004-2010 Richard Barry. Copyright (C) 2010-2016 Real Time Engineers Ltd.
Any and all data, files, source code, html content and documentation included in the FreeRTOSTM distribution or available on this site are the exclusive property of Real Time Engineers Ltd..
See the files license.txt (included in the distribution) and this copyright notice for more information. FreeRTOSTM and FreeRTOS.orgTM are trade marks of Real Time Engineers Ltd.