Background:
Junior R&D electronics engineer (the only EE in the company) - the hardware and the coding is not the problem. My biggest issue is getting a proper overview of the project, and where to start.
So far I've only made minor software projects (sub 500 lines of code), but I can't envision myself doing larger projects without losing overview of the functionality or lack of functionality.
How do you best structure / what tools do you use to structure large embedded software systems?
What I'm currently doing:
I usually start out, by sketching the functionality of the project. It could be one to many layered flow charts or related diagrams (block diagrams, etc.) and doing some research of the components/chips. Then I jump straight into coding (fail fast I guess) while referencing the datasheets / Internet, Coding one functionality at a time and testing it with dummy data, or similar test. It could be writing data to a MEM chip, and then if that works then it could be an SPI driver between the main chip and the MEM chip.
What answer I'm looking for:
Anything really. I will sort out what I find sensible. It could be a book, an article, personal experience, recommendations, etc.
I'm very interested in knowing how seniors tackle this.
Edit
First off, thank you for sharing your years of experience! All the answers are much appreciated. My take from this is;
- Create a clear and precise specification document.
- Create a software design document. (Something I will now add) Design doc templates
- Think in modules how ever redundant it may seem. (Something I need to focus more on)
- Follow a coding standard for structuring header/source files. (Never did this) Barr Group C standard
- Focus on creating the low level implementations first. (Communication etc.)
- Implement design patterns where ever possible/sensible. Design patterns
- Set up something for revision control (Github etc. - never used this much)
- Research continuous integration / continuous deployment (Something new I stumbled upon) CI & CD basics