历史上的今天
今天是:2025年04月16日(星期三)
2019年04月16日 | STM32堆栈设置
2019-04-16 来源:eefocus
1.堆和栈大小
定义大小在startup_stm32f2xx.s
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
2.堆和栈位置
通过MAP文件可知
HEAP 0x200106f8 Section 512 startup_stm32f2xx.o(HEAP)
STACK 0x200108f8 Section 1024 startup_stm32f2xx.o(STACK)
__heap_base 0x200106f8 Data 0 startup_stm32f2xx.o(HEAP)
__heap_limit 0x200108f8 Data 0 startup_stm32f2xx.o(HEAP)
__initial_sp 0x20010cf8 Data 0 startup_stm32f2xx.o(STACK)
显然 Cortex-m3资料可知:__initial_sp是堆栈指针,它就是FLASH的0x8000000地址前面4个字节(它根据堆栈大小,由编译器自动生成)
显然堆和栈是相邻的。

3.堆和栈空间分配
栈:向低地址扩展
堆:向高地址扩展
显然如果依次定义变量
先定义的栈变量的内存地址比后定义的栈变量的内存地址要大
先定义的堆变量的内存地址比后定义的堆变量的内存地址要小
4.堆和栈变量
栈:临时变量,退出该作用域就会自动释放
堆:malloc变量,通过free函数释放
另外:堆栈溢出,编译不会提示,需要注
史海拾趣
|
电子技术课程设计题目:秒表(要求:能精确显示0.01秒的变化;能同时对3个不同事件进行计时:比如长跑前三名) 电子技术课程设计题目:秒表(要求:能精确显示0.01秒的变化;能同时对3个不同事件进行计时:比如长跑前三名) … 查看全部问答> |
|
感觉USB,可深可浅. 浅的 不管三七二十一拿例子程序来仿,可能凑巧凑合着也能用. 深的,深不可测 香帮主能不能出点力,帮小白们普及点USB应用知识啊? 在上海或者南京什么地方办个班吧,2~5天时间,收费300~1000元… 查看全部问答> |
|
请教各位电子技术方面的前辈:本人是维修初学者,最近在给SAMSUNG K9F4G08U0A芯片写入原程序后,再读出写入后的程序发现写入后的程序与原程序大总份地方都不正确,编程器根本就没有办法检验,不知道是怎么回事?请各位前辈多多指教,因本人刚开始学 ...… 查看全部问答> |
|
我公司有个触摸屏是用wince英文系统的,我们电脑和触摸屏的故障信息是同步的,但是电脑改成中文故障信息后,触摸屏不能显示出中文故障,只显示乱码。 我应该怎么弄才能显示出来啊。… 查看全部问答> |
|
使用MAX485(单独USB供电)转换电平和485转USB,串口助手收发数据 逻辑是:PC通过串口助手发送数据给单片机使之进入中断后单片机将数据发送给PC。实验现象是:1:单片机通过485直接发送数据(不用中断),接收正确。2:使用串口中断后,在串口助手中 ...… 查看全部问答> |




