- About This
 - Languages
 - Motivation
 - MVP Requirements
 - Design Decisions
 - Formatting Guidelines
 - Milestones
 - Processes
 - Folder Structure
 
This is the code repository for staging the Student Organisation for Aerospace Research (SOAR's) C++ rewrite.
The original code in this repository was written in C, The old repository can be found here.
By default we are using the STMCubeIDE.
Use the _IDE folder to add support for your IDE of choice if needed.
Make sure to update the .gitignore.
- Layout desired requirements
 -  Design and document architecture
- Diagram
 - Reference other teams (if possible)
 
 -  Scope MVP
- Before September 6th (Classes begin)
 
 -  Build MVP
- PREREQ: Merge A3.3, Clang Format
 - Integration test on hardware
 - Full SW team approval
 
 - Create tasks and documentation to update each code section
 -  Create on-boarding presentation
- What it is
 - How it works
 - Why decisions were made
 
 - Merge MVP into master
 
- Design Freeze
- End of August
 
 - Design Review
- July 30th
 
 - Testing Schedule
- Build MVP
 
 - Presentation
- Mid September
 
 - Competition Data
- June 2023
 
 
The most relevant information from both documents is distributed in this repo.
Embedded software is written primarily in C/C++, using CMSIS with FreeRTOS as the underlying operating system. 
Scripts and Tools are written in various languages, primarily Python. 
Diagrams are designed with a variety of software, code based diagrams are written in PlantUML, other diagrams are designed in Diagrams.net
- Readable
 - Robust
 - Modular
 - Consistent
 - Easier for new members
 - Documented from the start
 - Test Driven Design
 
-  Compile flags/
#ifdefflag for solid vs hybrid. - Base Task Communication
 - UART poll and debug logging
 - Sensor log output over UART5
 - Queue
 -  Abstractions for important systems
- Class Diagrams
 
 - Module
 - Well documented
 - Testing Framework
 
- Tasks are contained and communicate using queues.
- Possibly look into a priority queue to handle queues getting too full.
 
 - Abstract Base Classes for things like 
SensororTask. - Pointer hierarchy
- References
 - Smart Pointers
- Beware RTOS support
 
 - Pointers
 
 - Reduce cognitive overhead by documenting your thought process
for complicated tasks.
- Especially in non-trivial ifs or big loops.
 
 
- Functions are lowercase.
- Class related functions are uppercase.
 
 - Infinite Loops are written with 
while(1)as oppose tofor(;;). 
- Architecture Design Complete
 - MVP Complete
 - Rest of Codebase complete
 
- This should be improved in the future using a rename script, or by modifying CMake file if necessary. There may be a setting in CubeIDE
 - Whenever you change the .ioc file the following must be done
 
- Rename Core/main.cpp to Core/main.c
 - Generate code from .ioc change
 - Rename back to Core/main.cpp
 
- The 
Coredirectory contains code primarily generated by STM32CubeIDE, or for other Middlewares such as FreeRTOS. - Most of the written code should go into 
Componentsunder the most appropriate sub-directory. 
