Design and Programming of Embedded Systems