用贵公司的3687开发产品有一段时间了,可是有一个简单的问题(堆和栈)没有弄明白:
开始新建工程师,一般采用的都是默认设置,只是在工程中会根据需要改变一下Section 设置,在生成向导中有Heap 和stacksize 两个选项。
请问:1. 选不选Heap 对程序会有影响吗? 我的程序并没有new,malloc 等关键字。我程序里设置#define HEAPSIZE 0x004,我试着将sbrk.c 删除掉,就会出现Undefined external symbol "_sbrk" referenced in "malloc" 错误。不知道为什么?
2. 据我了解,程序的中函数参数,临时变量等都会存放到栈(stack)中,可是我试着改变stack大小到很小,例如#pragma stacksize 0x10时候,程序仍然没有问题,运行正常,不知道是怎么回事?
.map 文件如下:
.。。。 。。。
PResetPRG
                                  00000400  0000041b        1c   2
PIntPRG
                                  0000041c  00000443        28   2
P
                                  00000800  00007d0f      7510   2
C
                                  00007d10  000083e5       6d6   2
C$DSEC
                                  000083e6  000083eb         6   2
C$BSEC
                                  000083ec  000083ef         4   2
D
                                  000083f0  00008433        44   2
CDataB
                                  0000a000  0000b757      1758   2
B
                                  0000e800  0000ec69       46a   2
R
                                  0000ec6a  0000ecad        44   2
S
                                  0000ef00  0000efff       100   2
BBEXT
                                  0000fd00  0000ff0f       210   2
C$INIT
                                  0000ff10  0000ff11         2   2
										
					
					
							
					
共7条
1/1															1							跳转至页
		 
					
				 
					
				第一个问题,如果程序中不用到new,malloc等功能,建议不选Heap。对程序没影响。还能省资源。另外,如果不选Heap,自动生成的启动文件里面也没有sbrk.c这个函数。所以,建议不选。
第二个问题,
B       0000e800  0000ec69      46a   2
R       0000ec6a  0000ecad      44    2
S       0000ef00  0000efff      100   2
E800 RAM首地址(低地址)
EFFF RAM尾地址(高地址)
初始化后,栈指针在EFFF,栈递减生长
EFFF - 栈大小 = 栈底(即您上边的ef00)
不管栈大小定义了多少,栈照常运行,栈指针照常递减。
您定义的栈大小,用于编译器检查,如果S段与R段内容冲突了,就报错。如果没冲突,栈运行到S段之外是有可能的,但是也可能会有冲突危险。
总之,设定一个合适的堆栈大小“确保值”,还是很必要的。
 
					
				共7条
1/1															1							跳转至页
		回复
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |

 
					
				
 
			
			
			
						
			 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

