My goal is to create a small, clean and easy understendable implementation of universal-purpose preemtive soft-realtime kernel for ATmega chipsets.
The kernel of DimOS is less than 300 lines of C code. The only Assembler part used in project implements PUSHA and POPA commands used in context switching.
DimOS is free. It follows OpenBSD license. Feel free to do whatever you like with it.
Port to ATmega328P. ATmega8 was a nice start and DimOS is still runing on it, but to be honest, half kilobyte of RAM isn't as much. The old version was limited in number of tasks and stack depth. Moreover ATmega328 is meanwhile cheaper and more common today, thanks to ardunio project. So let us keep steps with time.
Switch to dynamic memory allocation. Space isn't such issue now. My current test program with half-dozen tasks uses no more than 20% of flash and less than half of RAM. The plenty of RAM allows the luxury of dynamic memory. On the benefit site, you don't need to bother about number of tasks and static memory resources anymore.
All queues are implemented with robust and well designed OpenBSD's sys/queue.h macros. There is no need to roll out own linked lists functions.
If you like to participate or play with code, check it out from my CVS reporistoy.