Fundamentals of Embedded Software: Where C and Assembly Meet