B1MD MCAL DIO例程生成的hex文件为什么有0x1FFF8400地址的信息?
-
-
您好,多出来的区域是
.bss
段的内容。多出这部分的原因如下:ARM Compiler armclang Reference Guide
__attribute__((section("name"))) variable attribute
The section attribute specifies that a variable must be placed in a particular data section.Normally, the ARM compiler places the data it generates in sections like .data and .bss. However, you
might require additional data sections or you might want a variable to appear in a special section, for
example, to map to special hardware.If you use the section attribute, read-only variables are placed in RO data sections, writable variables
are placed in RW data sections.If the section name starts with .bss., the variable is placed in a ZI section.
ref:Arm document
根据 armclang 的要求,自定义的
.bss
段名称需要以.bss
开头。否则会认为该段是.data
段,而其他的编译器中没有对应的限制。MCAL的代码中,定义的段名称类似于
.mcal_data
,.mcal_bss
,不能满足KEIL中的限制,所以都会识别为data
段。而在对应的 scf 文件中,是通过类似如下代码固定其位置的:LR_RAM_0 0x1fff8400 { ... mcal_bss_region_start +0 EMPTY 0 { } mcal_bss_region +0 NOCOMPRESS { *(.mcal_bss) } mcal_bss_region_end +0 EMPTY 0 { } ... } ScatterAssert(ImageLength(LR_RAM_0) <= 0xF800)
所以这一段
.bss
会被识别成.data
段的数据,并存放到 load addr 0x1fff8400。
实际上这部分区域并不会影响程序的实际运行,因为
.bss
段 symbol 的地址是正确的。如果您不想要这部分代码的区域,您可以这样操作:- 替换工程下的
.bss
段名称:.mcal_bss
->.bss.mcal_bss
.mcal_bss_no_cacheable
->.bss.mcal_bss_no_cacheable
- 在配置工具中 Lock 住 Platform。
经过上述操作后,生成的代码段中就没有多余的区域了。
- 替换工程下的
帮助没办法联网的电脑使用YCT
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...