找回密码
 立即注册
查看: 288|回复: 9

进入for循环几次后变量的值被修改成很大的数,程序跑飞,中间设有while等待感觉没等到条件成立就跳过等待了,怀疑栈溢出找不到修改办法

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-25 05:34:07
已绑定手机

2

主题

8

回帖

62

积分

注册会员

积分
62
发表于 2025-1-21 08:35:11 来自手机 | 显示全部楼层 |阅读模式
进入for循环几次后变量的值被修改成很大的数,程序跑飞,中间设有while等待感觉没等到条件成立就跳过等待了,怀疑栈溢出找不到修改办法,感谢大神指导。
1000004833.png
1000004834.png
1000004835.png
1000004836.png
1000004837.png
1000004838.png
1000004839.png
1000004840.png
1000004841.png
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-25 05:34:07
已绑定手机

2

主题

8

回帖

62

积分

注册会员

积分
62
发表于 2025-1-21 08:36:31 来自手机 | 显示全部楼层
补充一下,删掉次要代码,只保留主要代码可以运行。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2025-1-21 09:37:12 | 显示全部楼层
想要判断是否堆栈问题,至少要提供芯片型号跟RAM使用情况。例如:
截图202501210920595968.jpg
此外编译生成的m51文件可以看到编译器分配的堆栈起始地址
截图202501210923474167.jpg
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-25 05:34:07
已绑定手机

2

主题

8

回帖

62

积分

注册会员

积分
62
发表于 2025-1-21 10:13:04 来自手机 | 显示全部楼层
乘风飞扬 发表于 2025-1-21 09:37
想要判断是否堆栈问题,至少要提供芯片型号跟RAM使用情况。例如:

此外编译生成的m51文件可以看到编译器分 ...

下午发你
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-25 05:34:07
已绑定手机

2

主题

8

回帖

62

积分

注册会员

积分
62
发表于 2025-1-21 13:27:03 来自手机 | 显示全部楼层
乘风飞扬 发表于 2025-1-21 09:37
想要判断是否堆栈问题,至少要提供芯片型号跟RAM使用情况。例如:

此外编译生成的m51文件可以看到编译器分 ...

芯片是ai8051u34k64
1000004845.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2025-1-21 14:20:22 | 显示全部楼层

8051U的堆栈放在edata空间,从当前RAM使用情况来看,堆栈空间是足够的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-25 05:34:07
已绑定手机

2

主题

8

回帖

62

积分

注册会员

积分
62
发表于 2025-1-21 15:10:20 来自手机 | 显示全部楼层
乘风飞扬 发表于 2025-1-21 14:20
8051U的堆栈放在edata空间,从当前RAM使用情况来看,堆栈空间是足够的。

有没地方能改,我的没有m51文件,也没startup,也没linker选项,我的变量有时被改到很大的数,有时是0。

点评

可以检查是否存在数组越界访问,以及打开了中断但是没有定义中断函数的问题。 数组越界可以将数组封装为一个函数,通过使用if检查每次访问的值,如果错误了使用某个io口输出电平,这样虽然程序运行速度会慢很多,但  详情 回复 发表于 2025-1-21 16:42
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5454

积分

版主

积分
5454
发表于 2025-1-21 16:42:54 | 显示全部楼层
涪陵*** 发表于 2025-1-21 15:10
有没地方能改,我的没有m51文件,也没startup,也没linker选项,我的变量有时被改到很大的数,有时是0。 ...

可以检查是否存在数组越界访问,以及打开了中断但是没有定义中断函数的问题。
数组越界可以将数组封装为一个函数,通过使用if检查每次访问的值,如果错误了使用某个io口输出电平,这样虽然程序运行速度会慢很多,但是可以保证能检查到问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-25 05:34:07
已绑定手机

2

主题

8

回帖

62

积分

注册会员

积分
62
发表于 2025-1-22 08:13:13 来自手机 | 显示全部楼层
王昱顺 发表于 2025-1-21 16:42
可以检查是否存在数组越界访问,以及打开了中断但是没有定义中断函数的问题。
数组越界可以将数组封装为 ...

我再检查一下我的逻辑
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-25 05:34:07
已绑定手机

2

主题

8

回帖

62

积分

注册会员

积分
62
发表于 2025-2-10 08:21:17 来自手机 | 显示全部楼层
问题已解决,过程很麻烦,软件与硬件都修改后才解决了。预处理数据消耗更多的内存避免了栈溢出,另外电机到位检测选了串口返回数据放弃了特定引脚电平检测。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 13:04 , Processed in 0.135182 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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