Design Patterns for Embedded Systems in C: An Embedded Software Engineering Toolkit