野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11912|回复: 10

大容量的stm设置缓冲数组的问题。

[复制链接]
发表于 2015-12-18 20:20:04 | 显示全部楼层 |阅读模式
大容量产品不是有64K的ram吗,为什么我设置一个uint_8 buf[2048]的缓冲数组之后,调试程序会直接进入硬件错误中断里,设置成buf【512】就没问题。
回复

使用道具 举报

发表于 2015-12-18 20:52:04 | 显示全部楼层
我不知道你是什么MCU?我是F103ZET6的,我立即测试了一下,我可以成功下载,没有问题的啊。你是什么CPU的?奇怪了哦。

大数组测试1.jpg
回复 支持 反对

使用道具 举报

发表于 2015-12-19 08:38:42 | 显示全部楼层
你现在定义的是局部变量,用到栈空间,栈空间大小在startup_stm32f10x_hd.s文件中分配的
Stack_Size      EQU     0x00001000
这里你要改大一些就可以了
或者你定义成全局变量也可以
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2015-12-20 17:14:31 | 显示全部楼层
qduwg 发表于 2015-12-18 20:52
我不知道你是什么MCU?我是F103ZET6的,我立即测试了一下,我可以成功下载,没有问题的啊。你是什么CPU的 ...

这样是可以的  我的也能下载 但是在调试时候,运行了几句之后就跳到错误中断了。我查了资料应该是楼上说的原因  需要改大栈空间
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-20 17:16:05 | 显示全部楼层
亽亼 发表于 2015-12-19 08:38
你现在定义的是局部变量,用到栈空间,栈空间大小在startup_stm32f10x_hd.s文件中分配的
Stack_Size       ...

就是这个原因  
回复 支持 反对

使用道具 举报

发表于 2015-12-20 17:27:18 | 显示全部楼层

那调试还跟这个栈的大小有关吗?难道小了就不能调试了?
回复 支持 反对

使用道具 举报

发表于 2015-12-21 08:33:16 | 显示全部楼层
局部变量就是用到栈空间,栈空间小了就是不行,这跟调不调试没关系
回复 支持 反对

使用道具 举报

发表于 2015-12-21 18:09:32 | 显示全部楼层
qduwg 发表于 2015-12-20 17:27
那调试还跟这个栈的大小有关吗?难道小了就不能调试了?

如果设置的局部变量刚好接近栈的大小,然后调试的时候还需要一些额外的空间,那么就有可能超过栈的大小了,这样就会出现内存错误。如果只是单纯的编译下载运行就没有问题,因为没有调试需要开销的额外空间。
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-1-8 22:57:46 | 显示全部楼层
qduwg 发表于 2015-12-20 17:27
那调试还跟这个栈的大小有关吗?难道小了就不能调试了?

不是不能调试,是程序不能实际运行。一运行就进去错误中断。原因就是栈空间超出了
回复 支持 反对

使用道具 举报

发表于 2016-1-9 22:12:33 | 显示全部楼层
我的这个栈设置的默认值是这么大的。没有问题啊。
栈大小.jpg

回复 支持 反对

使用道具 举报

发表于 2016-12-29 15:48:56 | 显示全部楼层
亽亼 发表于 2015-12-19 08:38
你现在定义的是局部变量,用到栈空间,栈空间大小在startup_stm32f10x_hd.s文件中分配的
Stack_Size       ...

我也是同样的问题,为什么我改大了它还是进入了死循环?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-14 02:25 , Processed in 0.044348 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表