打印
[技术问答]

HC32F460KCTA/KETA单片机跑一段时间后,程序就再也不能正常运行了

[复制链接]
3310|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tangdengan|  楼主 | 2025-1-25 15:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 tangdengan 于 2025-1-25 16:15 编辑

我们使用HC32F460KCTA/KETA的系统,操作系统是RTT
应用分为bootloader和application,这个产品硬件已经销售了几年了,但现在遇到了一个非常神奇的问题
我们的设备在现场正常工作一段时间后,可能是10天,也可能是一个月或者更长,这个设备会出现不能正常运行的情况
表现出来是 rtt 的主任务提示 task overflow
看到这个,我们一般都认为是 任务的栈空间小了,但是这个出现在  大while还没有到达的时候,并且这个溢出的时候,是在初始化启动其它子任务,并不需要多大的栈开消,况且在没有出故障之前,这个运行是很正常的,其它设备也是这个调用流程,没有问题。这个前面调用的逻辑已经大范围在产品中使用,只有这一批出会现,首先,排险硬件设计和硬件不稳定的情况,我们这批产品之前已经工作了1年多了。

方案1:触发硬件看门狗
一但出现这个情况,我们的外置硬件看门狗会对rst引脚复位,单片机同样是跑到此位置,然后报错。

方案2:现场断电
我们试过在现场将设备断电,过了几分钟后再开启,还是同样的地方报错

方案3:程序对比
通过SWD口将片内程序读出来比较,内部FLASH程序没有被修改

方案4:程序复现
用出现此故障的设备重新刷写与此故障相同的程序,故障现象一致,需要重新刷写一个能正常运行的程序后,再刷回之前版本的程序,又可以正常运行

不知道该故障是否触发单片机的某个“特性”????期待有解决方案。
补充一下FLASH和内存的占用情况
Program Size: Code=133176 RO-data=10464 RW-data=1468 ZI-data=172964  


使用特权

评论回复
沙发
tangdengan|  楼主 | 2025-2-3 11:07 | 只看该作者
过了一个年,还是没有回复,在网上看到有网友遇到内存跨界指针对齐的问题,也不知道是不是与此有关。

使用特权

评论回复
板凳
caigang13| | 2025-2-5 22:02 | 只看该作者
这个比较怪,从你描述来看大概率还是软件问题,先烧写一个最简单的程序测试硬件是否有问题。

使用特权

评论回复
地板
tangdengan|  楼主 | 2025-2-6 14:54 | 只看该作者
本帖最后由 tangdengan 于 2025-2-6 14:56 编辑
caigang13 发表于 2025-2-5 22:02
这个比较怪,从你描述来看大概率还是软件问题,先烧写一个最简单的程序测试硬件是否有问题。 ...

想过软件问题,但目前我们的测试过程和方案来看,软件的可能性也不大。因为已经完全断电了,重新上电开机还是这样的,我在怀疑是不是他的SRAM有掉电保持功能:就是那个扩展的部分,即使掉电了,但SRAM同样存有数据。
因为触发这个问题后,将重新编译的版本下载下去,片子就正常了,片子正常后,再烧回之前的程序,也能正常跑,这就是神奇的地方,不得解。

使用特权

评论回复
5
wubangmi| | 2025-2-17 15:35 | 只看该作者
看到你有BOOT和APP,那就是有可能要进行APP的升级,也需要跳转,那么我预测的问题就是代码卡在你APP的主频升频代码里了。
问题1:你app的主频是不是升到了200Mhz?
问题2:如果是200Mhz主频,那么你有没有对PWC_PWRC2这个寄存器进行配置?200Mhz主频下这个寄存器的值应该是0xCF;如果是其他值就不对。
以上两个问题不是每个MCU都会出现,概率应该是0.02~0.03%的样子。有这个问题的MCU会很容易复现,只要不停的上下电就能复现。
(void)PWC_HighSpeedToHighPerformance();        ///< Switch driver ability to HighPerformance
以上这个函数是v3.3.0库的,你需要在切换PLL之前调用此函数。如果是其他版本的库,请自行查找相关函数。
基本上就是这个问题导致的,如果解决了你的问题,请给好评。

假如你的主频不是200M,也就是小于168Mhz的话,你就查其他问题。

使用特权

评论回复
6
weifeng90| | 2025-2-18 22:52 | 只看该作者
如果是这样的话,感觉还是代码哪里逻辑不对。

使用特权

评论回复
7
地瓜patch| | 2025-2-28 22:11 | 只看该作者
仿真时在哪里卡住了?

使用特权

评论回复
8
7456| | 2025-3-6 20:36 | 只看该作者
我用的460JETA,把部分flash当eeprom,数据有14K,偶尔会遇到写数据的时候会丢数据。换了新唐的芯片,程序相当稳定。

使用特权

评论回复
9
tangdengan|  楼主 | 2025-3-10 16:37 | 只看该作者
wubangmi 发表于 2025-2-17 15:35
看到你有BOOT和APP,那就是有可能要进行APP的升级,也需要跳转,那么我预测的问题就是代码卡在你APP的主频升 ...

频率100M,目前现场将SRAM的大小做了调整,目前已经稳定运行了1个多月了,怀疑是他掉电保持那个SRAM可能与我们理解的不一样,我们那个固件的SRAM可能正好指到那个位置了

使用特权

评论回复
10
tangdengan|  楼主 | 2025-3-10 16:39 | 只看该作者
weifeng90 发表于 2025-2-18 22:52
如果是这样的话,感觉还是代码哪里逻辑不对。

同样的代码,改了SRAM的大小后,已经正常运行1月有余了,个人不排除是他那个掉电保持SRAM可能并不是真正的SRAM

使用特权

评论回复
11
wubangmi| | 2025-3-10 17:47 | 只看该作者
tangdengan 发表于 2025-3-10 16:39
同样的代码,改了SRAM的大小后,已经正常运行1月有余了,个人不排除是他那个掉电保持SRAM可能并不是真正 ...

F460的掉电保持的RAM指的是掉电模式保持,不是MCU的VCC的没有了还保持。
另外0x1FFFFFFF和0x20000000这两个RAM地址不能跨区域操作。
也就是说假如你定义的这个变量是16bit的,他刚好是0x1FFFFFFF开始,那就会出问题。
具体出什么问题未知,用户手册上对这部分有介说明。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:专业DTU/RTU开发,上位机开发 hycorp.taobao.com

13

主题

55

帖子

0

粉丝