-
Notifications
You must be signed in to change notification settings - Fork 81
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(Examples): Add RTOS Debug Features to MAX78000 FreeRTOSDemo #962
Merged
Jake-Carter
merged 13 commits into
analogdevicesinc:main
from
Brandon-Hurst:feature/rtos-stats
Mar 28, 2024
Merged
feat(Examples): Add RTOS Debug Features to MAX78000 FreeRTOSDemo #962
Jake-Carter
merged 13 commits into
analogdevicesinc:main
from
Brandon-Hurst:feature/rtos-stats
Mar 28, 2024
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…feature/rtos-stats
…/msdk into feature/rtos-stats
Jake-Carter
reviewed
Mar 26, 2024
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @Brandon-Hurst @BrentK-ADI, looks like a great start. A few comments below.
Is there also some mechanism for determining which task/context is active from inside the hard fault handler? This would also be useful to narrow down which task is at fault
Jake-Carter
approved these changes
Mar 28, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Description
Added Debug features to the FreeRTOSDemo for MAX78000. These features are added in such a way as to be easily copyable to most other MCUs in the MSDK.
Summary:
Ideally this would be available at some point for all FreeRTOSDemo Examples or placed inside the MSDK FreeRTOS library. Exposing it inside an example may be preferable as an instructive inclusion for developers. This PR is meant to initiate a dialogue and add some more RTOS Debug features to MSDK. I am also happy to modify anything needed for this PR.
Regarding the HardFault Handler...
Credit to @BrentK-ADI for this portion of the example.
The code included is recommended in the FreeRTOS Documentation to improve debugging Hard Faults by grabbing the stack context from which the code failed. Debugging Hard Faults can be notoriously tricky without this information.
Link: https://www.freertos.org/Debugging-Hard-Faults-On-Cortex-M-Microcontrollers.html
Testing
RTOS Stats Test
The build was completed and ran successfully on MAX78000FTHR, and RTOS Stats were gathered via the "RTOS Views" extension in VSCode, image below.
Worth noting is that FreeRTOS's kernel does not smartly handle Timer Overflow on the RTOS Stats Timer, so overflowing the provided counter will give inaccurate results. This is documented within FreeRTOS_Debug.c provided. The default 32-bit, 32 kHz configuration provides nearly 100 days before overflow.
HardFault Handler Test
Hard Fault Analysis was tested via a privileged memory read of address 0xFFFFFFFF inserted into the example.
The values shown are from the context which caused the HardFault, not from within the HardFault itself. This streamlines the process of finding the code which caused the fault (in this case located at address 0x1000_083e)