找回密码
 立即注册
查看: 455|回复: 14

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

[复制链接]
  • TA的每日心情
    慵懒
    2024-1-17 14:27
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    3

    主题

    17

    回帖

    273

    积分

    中级会员

    积分
    273
    发表于 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






    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    12 小时前
  • 签到天数: 131 天

    [LV.7]常住居民III

    26

    主题

    1297

    回帖

    4033

    积分

    论坛元老

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

    使用道具 举报

  • TA的每日心情
    开心
    15 小时前
  • 签到天数: 158 天

    [LV.7]常住居民III

    17

    主题

    370

    回帖

    1305

    积分

    荣誉版主

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

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-1-17 14:27
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    3

    主题

    17

    回帖

    273

    积分

    中级会员

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

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

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-1-17 14:27
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    3

    主题

    17

    回帖

    273

    积分

    中级会员

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

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

    使用道具 举报

  • TA的每日心情
    开心
    15 小时前
  • 签到天数: 158 天

    [LV.7]常住居民III

    17

    主题

    370

    回帖

    1305

    积分

    荣誉版主

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

    使用道具 举报

    该用户从未签到

    1

    主题

    113

    回帖

    629

    积分

    高级会员

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

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

    使用道具 举报

    该用户从未签到

    551

    主题

    9307

    回帖

    1万

    积分

    管理员

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

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-1-17 14:27
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    3

    主题

    17

    回帖

    273

    积分

    中级会员

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

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

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-1-17 14:27
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    3

    主题

    17

    回帖

    273

    积分

    中级会员

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

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-3 23:41 , Processed in 0.091631 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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