求助,关于启动文件中的堆栈

2019-07-20 21:10发布

在启动文件中定义了栈的大小是0x400,堆的大小是0x200
Stack_Size      EQU    0x00000400

              AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem    SPACE  Stack_Size
__initial_sp

Heap_Size     EQU    0x00000200

            AREA    HEAP, NOINIT, READWRITE,ALIGN=3
__heap_base
Heap_Mem  SPACE   Heap_Size
__heap_limit

那么栈顶地址不是应该是0x20000600吗?但我在map文件查到的是0x20000738
__initial_sp                             0x20000738   Data           0  startup_stm32f40_41xxx.o(STACK)

请问是不是我理解错了






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
aozima
1楼-- · 2019-07-20 23:46
只是在这里定义了一个数组,但链接脚本中并没有限制一定要把这stack和heap这两个数组放在哪里。
只是规定了启动入口放在FLASH的0地址。
Fighting_Tao
2楼-- · 2019-07-21 02:29
aozima 发表于 2016-7-25 10:57
只是在这里定义了一个数组,但链接脚本中并没有限制一定要把这stack和heap这两个数组放在哪里。
只是规定 ...

那请教一下栈顶地址 __initial_sp 是怎么算出来的啊
aozima
3楼-- · 2019-07-21 05:38
 精彩回答 2  元偷偷看……
Fighting_Tao
4楼-- · 2019-07-21 07:23
aozima 发表于 2016-7-25 11:37
翻译成C语言就是  [mw ...

嗯嗯,这几句汇编我看得懂。
[mw_shl_code=applescript,true]    HEAP                                     0x20000160   Section      512  startup_stm32f40_41xxx.o(HEAP)
    Heap_Mem                                 0x20000160   Data         512  startup_stm32f40_41xxx.o(HEAP)
    STACK                                    0x20000360   Section     1024  startup_stm32f40_41xxx.o(STACK)
    Stack_Mem                                0x20000360   Data        1024  startup_stm32f40_41xxx.o(STACK)
    __initial_sp                             0x20000760   Data           0  startup_stm32f40_41xxx.o(STACK)[/mw_shl_code]
这几句话是不是说栈从栈顶 0x20000760 开始向下生长,堆从0x20000160向上生长啊

一周热门 更多>