Principles of Embedded Software