找回密码
 立即注册
查看: 2527|回复: 30

求助关于STC32F死机重启的问题]已解决

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-03-12 16:14:06

7

主题

59

回帖

984

积分

高级会员

积分
984
发表于 2024-1-5 11:13:45 | 显示全部楼层 |阅读模式
本帖最后由 STCAI-32位8051 于 2024-4-18 14:01 编辑

如题所示,最近我在做一个低功耗的小项目,频繁进入掉电模式,最多一秒会掉电唤醒60次左右。单片机为STC32F12K54,主频52M,电压2.8V,WTST = 2,随着代码量的增加,目前出现了一个只要增删代码,下载到单片机,单片机就会一直重启的问题
目前data=8.3 edata+hdata=1329 xdata=2185 const=3265 code=33094 应该也没超限


已经排除过数组越界,电压不稳等因素,尝试加压和降频无改善,由于是经常休眠也不好接仿真
同样的代码可以在32G上能跑起来,证明代码应该是没问题的,代码不方便发
目前这个问题非常神奇,可能和也keil的编译有关,目前测试增加新代码或者删除部分代码,编译生成新的hex文件以后下载到单片机,可能会出现单片机一直重启的情况,而且针对这个新的hex文件,重启显现为100%必现
关键的来了,这个时候,我只要在代码任意一个位置,加上nop、i++、delay这种无关紧要的指令,使得新生成的hex文件大小变化1~4,那这hex文件变化的1~4中,必有一个大小的hex文件是可以稳定运行的!!
已经尝试过用不同版本的keil5编译同一份工程文件,编译生成的hex文件由于编译的优化机制不同,大小也有区别,也会导致一个可以执行,一个不能执行
截图202401051111571619.jpg

目前的的程序开头保留4个nop指令,只要编译出来的hex有问题,就通过变更注释nop指令的多少改变hex的大小从而使得代码正常运行,但这样也不是长久之计,故来咨询一下万能的网友,是否对此问题有所了解

下图为工程的设置,应该也没什么问题
截图202401051111273449.jpg






回复

使用道具 举报 送花

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

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2024-1-5 13:57:32 | 显示全部楼层
项目设置里面“L251 Misc”标签里,有没有用到“REMOVEUNUSED”?有的话把它删掉试试。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-01 04:31:49

24

主题

515

回帖

986

积分

荣誉版主

积分
986
发表于 2024-1-5 14:43:20 | 显示全部楼层
楼主看看代码不开优化有没有问题?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-03-12 16:14:06

7

主题

59

回帖

984

积分

高级会员

积分
984
发表于 2024-1-5 21:38:14 | 显示全部楼层
乘风*** 发表于 2024-1-5 13:57
项目设置里面“L251 Misc”标签里,有没有用到“REMOVEUNUSED”?有的话把它删掉试试。 ...

你好,我这边实测,结果重启现象还会出现,但现在我发现一个更有意思的事情,就是我生成文件 大小满足   (code大小) % 4 = 1的时候,代码必定正常运行, (code大小) % 4 = 2的时候必重启,满足 (code大小) % 4 = 0的时候运行必卡顿,太玄学了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-03-12 16:14:06

7

主题

59

回帖

984

积分

高级会员

积分
984
发表于 2024-1-5 21:39:28 | 显示全部楼层
社区*** 发表于 2024-1-5 14:43
楼主看看代码不开优化有没有问题?

你好,我这边实测,重启现象和开不开优化并无多大关系,但现在我发现一个更有意思的事情,就是我生成文件 大小满足   (code大小) % 4 = 1的时候,代码必定正常运行, (code大小) % 4 = 2的时候必重启,满足 (code大小) % 4 = 0的时候运行必卡顿
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-01 04:31:49

24

主题

515

回帖

986

积分

荣誉版主

积分
986
发表于 2024-1-5 21:59:24 | 显示全部楼层
通过你的描述,应该是你的代码使用了大量的指针运算和结构体,以及字节对齐等等,估计还是代码的问题,需要耐心排查。
回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2024-1-5 22:14:51 | 显示全部楼层
御坂美*** 发表于 2024-1-5 21:38
你好,我这边实测,结果重启现象还会出现,但现在我发现一个更有意思的事情,就是我生成文件 大小满足    ...

会不会是指令缓存技术方面的BUG,可以把主频降为24MHz,WTST = 0试试,或者主频52MHz,WTST = 1试试
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-1-5 22:28:57 | 显示全部楼层
【单片机为STC32F12K54,主频52M,电压2.8V,WTST = 2】 这个 可以
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-03-12 16:14:06

7

主题

59

回帖

984

积分

高级会员

积分
984
发表于 2024-1-5 23:26:02 | 显示全部楼层
社区*** 发表于 2024-1-5 21:59
通过你的描述,应该是你的代码使用了大量的指针运算和结构体,以及字节对齐等等,估计还是代码的问题,需要 ...

我觉得你说的很有可能,我是驱动OLED所有存了很多点阵数组,然后调用的时候是通过指针调用的,结构体倒是没有用,字节对齐我之前也往这个方向想过,但我查了一些资料,字节对齐好像是结构体才会有的问题,所以后面也没往这个方向上靠,可以请教一下指针啥的和字节对齐有联系吗
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-03-12 16:14:06

7

主题

59

回帖

984

积分

高级会员

积分
984
发表于 2024-1-5 23:27:12 | 显示全部楼层
神*** 发表于 2024-1-5 22:28
【单片机为STC32F12K54,主频52M,电压2.8V,WTST = 2】 这个 可以

嗯嗯,我觉得也和硬件应该关系不大
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 04:15 , Processed in 0.160219 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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