robertesth 发表于 2024-9-25 10:03

HC32单片机

死机现象:HC32L130 Cortex-M0出现所有的中断都进不去,主循环能正常运行,定时器和IO等都能正常运行
发现一个规律:
a. AD采样率10KHz,用DMA接收串口数据,串口中断和DAM中断都没开,出现死机。
死机情况串口和DMA都没有错误标志,DMA传输计数和内存地址都正常变化,说明DMA传输本身没有问题。
b. AD采样率10KHz,不用DMA,用串口中断接收数据,不出现。
c. AD采样率500Hz,用DMA接收串口数据,串口中断和DAM中断都没开,不出现。通过各种实验得出结论:cpu负荷重情况下,(可能总线错误)导致复位,此时复位标志为0x00,系统能进主循环,但所有中断都不能进。
查资料M3有总线错误异常中断,M0没有。解决方案:通过判断复位标志00进行一次软复位,或者通过主循环读取定时器做监控异常进而软复位。
https://i-blog.csdnimg.cn/blog_migrate/21d7957190f4dd9a6430b2b58f3f851d.png#4) 最后原因是:触发了ADC中断标志但没能进入中断服务,一直占据中断资源。
https://i-blog.csdnimg.cn/blog_migrate/f03730af0040def668fd316ca46c88df.png
0x28对应ADC中断号40。
正常逻辑:只有在中断ISR才能读取到中断号,在退出中断后该中断状态为0。
说明发生了ADC中断,但没有触发进入中断服务。ADC中断优先级是最高的,占据了中断资源导致其他中断无法进入。转自https://blog.csdn.net/tan_420727915/article/details/135764831

shenxiaolin 发表于 2024-9-29 10:24

会不会是中断使能关掉了?

更多更合适ii 发表于 2024-9-30 17:30

AD采样率500Hz,用DMA接收串口数据,串口中断和DAM中断都没开,不出现

p0gon9y 发表于 2024-11-13 22:25

根据你描述的现象和实验结果,HC32L130 Cortex-M0 在 CPU 负荷较重的情况下出现死机现象,且所有中断都无法进入,但主循环和定时器、IO 等功能仍能正常运行。这种情况可能总线错误或数据访问冲突

b5z1giu 发表于 2024-11-21 09:13

虽然 Cortex-M0 没有总线错误异常中断,但在高负荷情况下,可能会出现数据访问冲突或总线错误,导致系统进入一种“假死”状态。此时,虽然主循环和定时器等功能仍能运行,但中断系统可能无法正常工作。

cen9ce 发表于 2024-11-21 10:11

在高负荷情况下,中断优先级和抢占机制可能会受到影响。如果某个中断优先级设置不当,或者中断服务程序(ISR)执行时间过长,可能会导致其他中断无法及时响应。

g0d5xs 发表于 2024-11-21 12:23

DMA 和中断的交互可能会在高负荷情况下出现问题。虽然你提到 DMA 传输本身没有问题,但 DMA 和中断之间的同步机制可能会在高负荷情况下出现异常,导致中断无法进入。

ex7s4 发表于 2024-11-21 14:30

在高负荷情况下,多个任务或中断同时访问内存时,可能会出现内存访问冲突,导致系统进入异常状态。

l1uyn9b 发表于 2024-11-21 15:01

虽然你提到复位标志为 0x00,但硬件复位或看门狗复位可能会导致系统进入一种“假死”状态,此时虽然主循环和定时器等功能仍能运行,但中断系统可能无法正常工作。

lix1yr 发表于 2024-11-21 15:33

检查代码中是否有长时间运行的任务或中断服务程序,尽量缩短 ISR 的执行时间。

liu96jp 发表于 2024-11-21 16:45

优化任务调度,避免多个高优先级任务同时运行。

q1ngt12 发表于 2024-11-21 18:22

一定要确保 DMA 和中断之间的同步机制正确,避免在高负荷情况下出现异常。

q1d0mnx 发表于 2024-11-28 17:37

确保中断优先级设置合理,避免高优先级中断被低优先级中断抢占。

页: [1]
查看完整版本: HC32单片机