MarsWarrior:
The only problem I see is that COSA disables interrupts on a lot of places...
The Cosa synchronized blocks are used to achieve consistent updates and are very short (in the range of 10-50 us). Long interrupt disabled blocks are avoided as Cosa is interrupt and event driven. Very few of these block would or should be replaced by semaphores (or rw_locks). It is consistency on another level of abstraction.
Anyway this is an important issue how to use a RTOS and write code that is still bare-metal and uses very little resources (SRAM). Would like to know more about your experience with this. Great job!
Cheers!