打印

单片机RAM快用完了就出现死机的现象

[复制链接]
2235|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gnail092|  楼主 | 2021-2-1 09:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 gnail092 于 2021-2-1 12:12 编辑

64K的单片机RAM用了63k多,测试发现会出现死机的现象,但如果程序把一些变量屏蔽改为60K不到就不会出现这种现象,这是堆栈溢出问题吗?

我的理解是堆栈空间大小是启动文件中设置好了,RAM用了63k跟RAM用了60k都是已经包含了设置的堆栈空间了,这两个程序本身几乎是一样的,使用的最大堆栈深度应该是一样的,既然60kRAM不会溢出,63kRam应该也不会溢出,因为堆栈空间已经包含在里面了。

使用特权

评论回复

相关帖子

沙发
ayb_ice| | 2021-2-1 09:14 | 只看该作者
本帖最后由 ayb_ice 于 2021-2-1 09:15 编辑

这不一定的,只是有可能,是51吗,51只有最多256字节堆栈,如果是51,堆栈的可能性不大

使用特权

评论回复
板凳
wh6ic| | 2021-2-1 09:49 | 只看该作者
不用纠结了,换成有 96K 甚至更多 RAM 的型号。  大概率是 堆栈的 问题。

使用特权

评论回复
地板
mailshichao| | 2021-2-1 11:02 | 只看该作者
那会不会是你屏蔽掉的那部分变量所属的代码的问题呢,不够还是很有可能是溢出的问题

使用特权

评论回复
5
hobbye501| | 2021-2-1 11:47 | 只看该作者
可以试试优先级 调整一下  或者优化变量数量

使用特权

评论回复
6
gnail092|  楼主 | 2021-2-1 12:02 | 只看该作者
本帖最后由 gnail092 于 2021-2-1 12:12 编辑
wh6ic 发表于 2021-2-1 09:49
不用纠结了,换成有 96K 甚至更多 RAM 的型号。  大概率是 堆栈的 问题。

我的理解是堆栈空间大小是启动文件中设置好了,RAM用了63k跟RAM用了60k都是已经包含了设置的堆栈空间了,这两个程序本身几乎是一样的,使用的最大堆栈深度应该是一样的,既然60kRAM不会溢出,63kRam应该也不会溢出。因为堆栈空间已经包含在里面了。

使用特权

评论回复
7
gnail092|  楼主 | 2021-2-1 12:03 | 只看该作者
本帖最后由 gnail092 于 2021-2-1 12:12 编辑
ayb_ice 发表于 2021-2-1 09:14
这不一定的,只是有可能,是51吗,51只有最多256字节堆栈,如果是51,堆栈的可能性不大

...

M0核的,我的理解是堆栈空间大小是启动文件中设置好了,RAM用了63k跟RAM用了60k都是已经包含了设置的堆栈空间了,这两个程序本身几乎是一样的,使用的最大堆栈深度应该是一样的,既然60kRAM不会溢出,63kRam应该也不会溢出。因为堆栈空间已经包含在里面了。

使用特权

评论回复
8
ddllxxrr| | 2021-2-1 12:20 | 只看该作者
什么型号地单片机

使用特权

评论回复
9
ayb_ice| | 2021-2-1 12:56 | 只看该作者
gnail092 发表于 2021-2-1 12:03
M0核的,我的理解是堆栈空间大小是启动文件中设置好了,RAM用了63k跟RAM用了60k都是已经包含了设置的堆栈 ...

你把堆栈设置大点,
另外自己也应该心里有个基本的了解,如果没有很大的局部变量,堆栈的占用其实不大,几K就已经很够用了

使用特权

评论回复
10
icecut| | 2021-2-1 12:59 | 只看该作者
肯定会有问题. 局部变量复用导致出错.编译器优化有bug

使用特权

评论回复
11
ayb_ice| | 2021-2-1 13:10 | 只看该作者
gnail092 发表于 2021-2-1 12:03
M0核的,我的理解是堆栈空间大小是启动文件中设置好了,RAM用了63k跟RAM用了60k都是已经包含了设置的堆栈 ...

这个默认的设置不一定适合你的工程,需要根据实际情况适当调整的

使用特权

评论回复
12
gnail092|  楼主 | 2021-2-1 13:12 | 只看该作者
ayb_ice 发表于 2021-2-1 12:56
你把堆栈设置大点,
另外自己也应该心里有个基本的了解,如果没有很大的局部变量,堆栈的占用其实不大, ...

RAM只有1K不到了,栈空间再多分配个500字节看看,RAM就差不多用完了

使用特权

评论回复
13
gnail092|  楼主 | 2021-2-1 13:15 | 只看该作者
ayb_ice 发表于 2021-2-1 13:10
这个默认的设置不一定适合你的工程,需要根据实际情况适当调整的

栈大小设置的是0x4000,我觉得溢出的可能小比较小

使用特权

评论回复
14
gnail092|  楼主 | 2021-2-1 13:20 | 只看该作者
icecut 发表于 2021-2-1 12:59
肯定会有问题. 局部变量复用导致出错.编译器优化有bug

你的意思是我启动文件中堆栈设置的大小不够,编译器是最低优化等级

使用特权

评论回复
15
ayb_ice| | 2021-2-1 13:26 | 只看该作者
gnail092 发表于 2021-2-1 13:15
栈大小设置的是0x4000,我觉得溢出的可能小比较小

如果栈大小是0x4000,那溢出的可能性很小了

使用特权

评论回复
16
gnail092|  楼主 | 2021-2-1 13:39 | 只看该作者
ayb_ice 发表于 2021-2-1 13:26
如果栈大小是0x4000,那溢出的可能性很小了

所以我在考虑是不是存在RAM溢出阿,就是RAM剩下的空间要预留一点才行,应该不存在这种说法吧

使用特权

评论回复
17
ayb_ice| | 2021-2-1 13:43 | 只看该作者
gnail092 发表于 2021-2-1 13:39
所以我在考虑是不是存在RAM溢出阿,就是RAM剩下的空间要预留一点才行,应该不存在这种说法吧 ...

别开玩笑了,多怀疑自己

使用特权

评论回复
18
叶春勇| | 2021-2-1 19:04 | 只看该作者
指针溢出吗

使用特权

评论回复
19
guysxpf| | 2021-2-1 20:33 | 只看该作者
老铁,优化一下吧

使用特权

评论回复
20
fcccc| | 2021-2-1 21:39 | 只看该作者
做什么的软件能用这么多RAM?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

68

帖子

1

粉丝