gnail092 发表于 2021-2-1 09:06

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

本帖最后由 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

那会不会是你屏蔽掉的那部分变量所属的代码的问题呢,不够还是很有可能是溢出的问题

hobbye501 发表于 2021-2-1 11:47

可以试试优先级 调整一下或者优化变量数量

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应该也不会溢出。因为堆栈空间已经包含在里面了。

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应该也不会溢出。因为堆栈空间已经包含在里面了。

ddllxxrr 发表于 2021-2-1 12:20

什么型号地单片机

ayb_ice 发表于 2021-2-1 12:56

gnail092 发表于 2021-2-1 12:03
M0核的,我的理解是堆栈空间大小是启动文件中设置好了,RAM用了63k跟RAM用了60k都是已经包含了设置的堆栈 ...

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

icecut 发表于 2021-2-1 12:59

肯定会有问题. 局部变量复用导致出错.编译器优化有bug

ayb_ice 发表于 2021-2-1 13:10

gnail092 发表于 2021-2-1 12:03
M0核的,我的理解是堆栈空间大小是启动文件中设置好了,RAM用了63k跟RAM用了60k都是已经包含了设置的堆栈 ...

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

gnail092 发表于 2021-2-1 13:12

ayb_ice 发表于 2021-2-1 12:56
你把堆栈设置大点,
另外自己也应该心里有个基本的了解,如果没有很大的局部变量,堆栈的占用其实不大, ...

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

gnail092 发表于 2021-2-1 13:15

ayb_ice 发表于 2021-2-1 13:10
这个默认的设置不一定适合你的工程,需要根据实际情况适当调整的

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

gnail092 发表于 2021-2-1 13:20

icecut 发表于 2021-2-1 12:59
肯定会有问题. 局部变量复用导致出错.编译器优化有bug

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

ayb_ice 发表于 2021-2-1 13:26

gnail092 发表于 2021-2-1 13:15
栈大小设置的是0x4000,我觉得溢出的可能小比较小

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

gnail092 发表于 2021-2-1 13:39

ayb_ice 发表于 2021-2-1 13:26
如果栈大小是0x4000,那溢出的可能性很小了

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

ayb_ice 发表于 2021-2-1 13:43

gnail092 发表于 2021-2-1 13:39
所以我在考虑是不是存在RAM溢出阿,就是RAM剩下的空间要预留一点才行,应该不存在这种说法吧 ...

别开玩笑了,多怀疑自己

叶春勇 发表于 2021-2-1 19:04

指针溢出吗

guysxpf 发表于 2021-2-1 20:33

老铁,优化一下吧{:sweat:}

fcccc 发表于 2021-2-1 21:39

做什么的软件能用这么多RAM?
页: [1] 2
查看完整版本: 单片机RAM快用完了就出现死机的现象