初级会员

- 积分
- 109
- 金钱
- 109
- 注册时间
- 2016-4-30
- 在线时间
- 44 小时
|
50金钱
AREA USER_STACK, NOINIT, READWRITE;定义一个段,用来当栈,KEIL编译器里面设置栈的起始地址为0x20000000
SPACE 0X00000400 ;分配一段空间作为栈
MSP_TOP ;栈顶地址
AREA RESET, DATA, READONLY
DCD MSP_TOP ; Top of Stack
END
这里是STM32的启动代码的一小部分,有个问题,小弟不太明白。
用仿真来看内存,能发现0x8000000里面存的是0x2000460,按理来说0x20000000+0x00000400应该是0x200000400才对,这多出来的0x000000060是什么??
然后我就跑去map文件里面看(我也不知道这里的是什么东西,可是感觉很棒的样子)
发现了这两段东西
Symbol Name Value Ov Type Size Object(Section)
.bss 0x20000000 Section 96 libspace.o(.bss)
USER_STACK 0x20000060 Section 1024 start1.o(USER_STACK)
MSP_TOP 0x20000460 Data 0 start1.o(USER_STACK)
Symbol Name Value Ov Type Size Object(Section)
__libspace_start 0x20000000 Data 96 libspace.o(.bss)
__temporary_stack_top$libspace 0x20000060 Data 0 libspace.o(.bss)
然后我就将 AREA USER_STACK, NOINIT, READWRITE 改为 AREA USER_STACK,DATA, READWRITE
编译之后,发现这时候的0x8000000里面存的是0x2000400了,跑去map看发现变这样了
USER_STACK 0x20000000 Section 1024 start1.o(USER_STACK)
.bss 0x20000400 Section 96 libspace.o(.bss)
MSP_TOP 0x20000400 Data 0 start1.o(USER_STACK)
Symbol Name Value Ov Type Size Object(Section)
__libspace_start 0x20000400 Data 96 ibspace.o(.bss)
__temporary_stack_top$libspace 0x20000460 Data 0 libspace.o(.bss)
请教各位大大,这个NOINIT和DATA属性究竟发生了什么事??
|
最佳答案
查看完整内容[请看2#楼]
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.kui0099a/armlib_chdfajcf.htm
这里应该是解释了,可是看不懂~
|