I have spent quite some time on the code unification within my C framework. The unification consists in breaking low level drivers into 2 layers, where the upper layer is agnostic of the system it runs on and provides a fixed API to even upper layers of software.
It is this middle-layer of code that just enabled me e.g. to reuse the DC2N2 playback code in DC2N3 – despite of the fact DC2N2 uses SD Cards and DC2N3 uses USB flash disks – and pass tests successfully 🙂
The results of this effort are not confined to my embedded systems or just to a certain family of MCUs: I am enjoying the use of common code across PC, AVR, ARM and even the Commodore 64. That’s right! In fact, I will be developing the User Interface of USB-Commander for USBhost-64 on an ARM board with a 320×240 display attached to it instead of developing on the Commodore 64. The nice thing is that there will be no emulated back-end, no mock-up whatsoever: USB-Commander will have a release of its own on the ARM board itself not just on the C64 and the two will work exactly the same way 🙂