-
Notifications
You must be signed in to change notification settings - Fork 3k
STM: Fix heap size formula in scatter files #14133
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
Conversation
The heap size was incorrectly calculated. This fixes it by subtracting the Stack size, any memory chunks allocated before the start of the application (for vectors and/or crash report), and finally the size of the application from the total RAM size.
@hugueskamba, thank you for your changes. |
Ci started |
Jenkins CI Test : ✔️ SUCCESSBuild Number: 1 | 🔒 Jenkins CI Job | 🌐 Logs & ArtifactsCLICK for Detailed Summary
|
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.
@hugueskamba
Sorry for the late review. As per my comments, two targets have specially memory layouts, and from my understanding their calculations were correct before this PR.
} | ||
|
||
ARM_LIB_HEAP AlignExpr(+0, 16) EMPTY (MBED_RAM_SIZE-RAM_FIXED_SIZE+MBED_RAM_START-AlignExpr(ImageLimit(RW_IRAM1), 16)) { | ||
ARM_LIB_HEAP AlignExpr(+0, 16) EMPTY (MBED_RAM_SIZE-RAM_FIXED_SIZE+MBED_IRAM2_START-AlignExpr(ImageLimit(RW_IRAM1), 16)) { |
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.
This target has a very different memory layout - in fact, it has two RAMs at two distinct locations (see all lines above):
- RAM1 (address: MBED_RAM_START, size: MBED_RAM_SIZE):
- some part of static memory (see comment at line 88)
- heap (what we are calculating here)
- stack (== RAM_FIXED_SIZE, defined at line 86)
- RAM2 (address: MBED_RAM2_START, size: MBED_RAM2_SIZE):
- vector
- crash report
- remaining part of static memory (that didn't fit into RAM1), starting at MBED_IRAM2_START (they call that...)
So the old calculation was correct for this particular target.
ARM_LIB_HEAP AlignExpr(+0, 16) EMPTY (MBED_RAM_SIZE-RAM_FIXED_SIZE+MBED_IRAM2_START-AlignExpr(ImageLimit(RW_IRAM1), 16)) { | |
ARM_LIB_HEAP AlignExpr(+0, 16) EMPTY (MBED_RAM_SIZE-RAM_FIXED_SIZE+MBED_RAM_START-AlignExpr(ImageLimit(RW_IRAM1), 16)) { |
} | ||
|
||
ARM_LIB_HEAP AlignExpr(+0, 16) EMPTY (MBED_RAM_SIZE-RAM_FIXED_SIZE+MBED_RAM_START-AlignExpr(ImageLimit(RW_IRAM1), 16)) { ; Heap growing up | ||
ARM_LIB_HEAP AlignExpr(+0, 16) EMPTY (MBED_RAM_SIZE-RAM_FIXED_SIZE+MBED_IRAM2_START-AlignExpr(ImageLimit(RW_IRAM1), 16)) { ; Heap growing up |
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.
Similarly, this targets has two RAMs at two distinct locations. Some of the macros are defined in https://github.com/ARMmbed/mbed-os/blob/mbed-os-6.6.0/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L452xE/cmsis_nvic.h
See my other comment. I think the old calculation is correct here.
ARM_LIB_HEAP AlignExpr(+0, 16) EMPTY (MBED_RAM_SIZE-RAM_FIXED_SIZE+MBED_IRAM2_START-AlignExpr(ImageLimit(RW_IRAM1), 16)) { ; Heap growing up | |
ARM_LIB_HEAP AlignExpr(+0, 16) EMPTY (MBED_RAM_SIZE-RAM_FIXED_SIZE+MBED_RAM_START-AlignExpr(ImageLimit(RW_IRAM1), 16)) { ; Heap growing up |
Summary of changes
The heap size was incorrectly calculated.
This fixes it by subtracting the Stack size, any memory chunks allocated
before the start of the application (for vectors and/or crash report), and
finally the size of the application from the total RAM size.
Impact of changes
Migration actions required
Documentation
Pull request type
Test results
Reviewers