Einen Interpreter halte ich für besser. Der Compiler kann immer den gleichen P-Code für jeden Mikrocontroller erstellen. Nur der Runtime-Interpreter muss der jeweiligen Hardware angepasst werden.
Mein Vorbild: Interactive-C http://www.botball.org/ic/index.html

Das ist ein (pseudo) Multitask-Betriebssystem mit guter Doku.
Eigentlich braucht man da nur noch einen Interpreter für den AVR schreiben. Wie so etwas aussehen kann, ist an den Sources für den Motorola 6811 zu sehen.
http://www.cs.uml.edu/~fredm//cher/p...tive-c/source/