CodeSpriteEmbedded software consultancy
specializing in
ARM Powered systems
HomeSite MapClientsContact
Search this site 
powered by FreeFind

Firmware Design

Real Time Operating Systems

CodeSprite has worked with various real time operating systems, including uC/OS, SuperTask, GEC's Architect multi-tasking system and LiveDevices' SSX5. In one project CodeSprite carried out extensive optimization of uC/OS while porting it to the ARM966E-S core, and corrected a subtle race-condition that can cause an idle-task stack overflow in interrupt-intensive systems.

Many modern systems use a real time operating system, giving cooperative or pre-emptive multi-tasking capabilities to share the processor activity between a number of pseudo-simultaneous tasks. This is a good approach, because you're building on tried and tested code, save time in implementing and debugging your own scheduler, and often benefit from useful code modules available with the operating system, such as filing systems and communication stacks.

An operating system need not be a significant overhead in terms of code size or performance hit, indeed by efficiently allotting processing resources amongst a number of prioritised tasks, an operating system may actually achieve better performance than a simple "superloop" or time-division scheduler, since it can utilise "dead time" from the end of a task's activity until the next time-division task scheduler tick.

There are times however when a client prefers not to add an operating system to the product, and CodeSprite has worked on many projects where alternative scheduling has been implemented. One situation that would have been an interesting exercise with a traditional operating system was the maintenance of synchronisation between two different data streams, each taking a significant and varying amount of time to process, where one data stream was slipped on a dynamic basis to give the best average synchronisation to the other on a second by second basis. This required a very system specific scheduler to be implemented.