Add the crash_diag terminal command for diagnosing resets and crashes #877
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Changes the fault handlers so that on a fault all the relevant registers (those dumped on the stack by the MCU and the fault information registers) are stored in a RAM struct (in the .noinit section) before resetting. Same with the Chibios halt, stores the pointer to the reason string before resetting.
On a bootup, the RAM struct is only initialized if Power On reset flag is set, and the reset flags are also stored in the struct.
This is all the possible information about why a reset could have occurred, which is then exposed via the
crash_diagterminal command. Example output:With this output and the firmware .elf file (and in case of a package crash the package .elf) it should be possible to find the causes of a lot of in-the-field crashes and resets in general.