单片机RAM快用完了就出现死机的现象
本帖最后由 gnail092 于 2021-2-1 12:12 编辑64K的单片机RAM用了63k多,测试发现会出现死机的现象,但如果程序把一些变量屏蔽改为60K不到就不会出现这种现象,这是堆栈溢出问题吗?
我的理解是堆栈空间大小是启动文件中设置好了,RAM用了63k跟RAM用了60k都是已经包含了设置的堆栈空间了,这两个程序本身几乎是一样的,使用的最大堆栈深度应该是一样的,既然60kRAM不会溢出,63kRam应该也不会溢出,因为堆栈空间已经包含在里面了。
本帖最后由 ayb_ice 于 2021-2-1 09:15 编辑
这不一定的,只是有可能,是51吗,51只有最多256字节堆栈,如果是51,堆栈的可能性不大
不用纠结了,换成有 96K 甚至更多 RAM 的型号。大概率是 堆栈的 问题。 那会不会是你屏蔽掉的那部分变量所属的代码的问题呢,不够还是很有可能是溢出的问题
可以试试优先级 调整一下或者优化变量数量 本帖最后由 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:12 编辑
ayb_ice 发表于 2021-2-1 09:14
这不一定的,只是有可能,是51吗,51只有最多256字节堆栈,如果是51,堆栈的可能性不大
...
M0核的,我的理解是堆栈空间大小是启动文件中设置好了,RAM用了63k跟RAM用了60k都是已经包含了设置的堆栈空间了,这两个程序本身几乎是一样的,使用的最大堆栈深度应该是一样的,既然60kRAM不会溢出,63kRam应该也不会溢出。因为堆栈空间已经包含在里面了。 什么型号地单片机 gnail092 发表于 2021-2-1 12:03
M0核的,我的理解是堆栈空间大小是启动文件中设置好了,RAM用了63k跟RAM用了60k都是已经包含了设置的堆栈 ...
你把堆栈设置大点,
另外自己也应该心里有个基本的了解,如果没有很大的局部变量,堆栈的占用其实不大,几K就已经很够用了 肯定会有问题. 局部变量复用导致出错.编译器优化有bug gnail092 发表于 2021-2-1 12:03
M0核的,我的理解是堆栈空间大小是启动文件中设置好了,RAM用了63k跟RAM用了60k都是已经包含了设置的堆栈 ...
这个默认的设置不一定适合你的工程,需要根据实际情况适当调整的 ayb_ice 发表于 2021-2-1 12:56
你把堆栈设置大点,
另外自己也应该心里有个基本的了解,如果没有很大的局部变量,堆栈的占用其实不大, ...
RAM只有1K不到了,栈空间再多分配个500字节看看,RAM就差不多用完了 ayb_ice 发表于 2021-2-1 13:10
这个默认的设置不一定适合你的工程,需要根据实际情况适当调整的
栈大小设置的是0x4000,我觉得溢出的可能小比较小 icecut 发表于 2021-2-1 12:59
肯定会有问题. 局部变量复用导致出错.编译器优化有bug
你的意思是我启动文件中堆栈设置的大小不够,编译器是最低优化等级 gnail092 发表于 2021-2-1 13:15
栈大小设置的是0x4000,我觉得溢出的可能小比较小
如果栈大小是0x4000,那溢出的可能性很小了 ayb_ice 发表于 2021-2-1 13:26
如果栈大小是0x4000,那溢出的可能性很小了
所以我在考虑是不是存在RAM溢出阿,就是RAM剩下的空间要预留一点才行,应该不存在这种说法吧 gnail092 发表于 2021-2-1 13:39
所以我在考虑是不是存在RAM溢出阿,就是RAM剩下的空间要预留一点才行,应该不存在这种说法吧 ...
别开玩笑了,多怀疑自己 指针溢出吗 老铁,优化一下吧{:sweat:} 做什么的软件能用这么多RAM?
页:
[1]
2