How to Develop Embedded Software
This is a book contributed by David Clifton. The purpose of the book is to provide a real-life example of some software engineering techniques for intermediate level embedded system projects.
It provides in depth Intermediate level projects that often require tools and skills beyond those used for beginning arduino/main-loop/interrupt-routine systems.
Download the complete pdf here.