reusable software components object oriented embedded systems programming in c