完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
keil是一款MCU使用广泛的IDE,当程序规模较大时,我们使用malloc从堆中申请内存,有时编译成功,而程序无法正常运行,通过调试观察申请成功而使用此内存空间时又显示为野指针错误,或者出现程序莫名卡死等现象。
在确保程序语法无误,没有堆栈溢出的操作后,我们应该检查分配给程序的堆栈空间是否足够,因为keil工程在运行中可使用的最大堆栈空间是事先分配好的。 编译后在编译输出窗口可看到程序中各个部分的占用空间大小,或者在.map文件中可看到相关信息 各部分代表什么含义这里不做详细介绍了,我们在新建一个空工程时会发现ZI-data(未初始化全局及静态变量)是一个比较大的数字,其实就是事先为堆栈分配的空间。当堆栈空间不足导致程序无法正常运行时我们需要修改预设的堆栈空间大小(EQU后)。 其实不止keil或其他IDE,linux系统的栈空间也是可以通过命令修改的,因此在使用较大内存时或程序较大时需要注意是不是预留的堆栈空间不足导致的。另外提醒大小申请的堆空间使用结束后不要忘记释放哦。 |
|
|
|
只有小组成员才能发言,加入小组>>
3277 浏览 9 评论
2950 浏览 16 评论
3454 浏览 1 评论
8983 浏览 16 评论
4044 浏览 18 评论
1093浏览 3评论
567浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
564浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2298浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1855浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 22:32 , Processed in 0.994060 second(s), Total 50, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号