http://www.keil.com/support/docs/3380.htm
QUESTION
For the following example code:
char test_array[8];
The linker reports these memory sizes RW data = 8 and ZI data = 0
While for:
char test_array[9];
The linker reports these memory sizes RW data = 0 and ZI data = 9.
Why is the latter in the ZI section but the former isn't? Is there a way to change the linker behaviour?
ANSWER
Data objects smaller than 9 bytes get moved to the RW region for optimization reasons. This threshold can be controlled by the bss_threshold compiler switch. To enable this option in µVision please add the compiler switch in Options for Target — C/C++ — Misc Controls field.
Example:
--bss_threshold=0
Note:
- Changing the bss_threshold setting might result in increased code size.