STM32H7的双核通信(CM7与CM4)共享内存与硬件信号量HSEM死锁排查记录

l
lanmm 2026-10-24 07:57
290 3
在做一个工业伺服通信方案,CM7跑实时EtherCAT协议栈,CM4跑外设采样与PID。两者通过SRAM4(0x38000000)作为共享环形缓冲区,并用HSEM硬件信号量做互斥锁。
压力测试跑到第72小时出现双核互相挂起。最后排查抓到是CM7进HardFault前锁死了HSEM,CM4自旋等待死锁。
想请教大家多核方案都是怎么做异常保底看门狗互锁的?

全部回复 3

钠
钠远 2026-10-24 08:57
#2
建议在共享内存头部加入心跳时间戳(Heartbeat),任何一侧超过50ms不刷时间戳,另一侧立即触发强行解锁并保存Dump日志,同时由独立硬件看门狗复位整个芯片。
t
testuser20261 2026-10-24 09:57
#3
另外注意Cache一致性!CM7有D-Cache,如果共享内存映射在可Cache区域,必须用SCB_CleanInvalidateDCache或者在MPU里把该段内存配置为Device/Strongly-Ordered,不然也会读到脏数据导致状态机紊乱。
q
qingzhuxiaobei 2026-10-24 10:57
#4
赞同MPU配置方案。我们直接把SRAM4设为Non-Cacheable + Shareable,虽然读写稍微慢几个周期,但排除了99%的核间同步玄学Bug。
发表回复
帖子信息
板块 技术交流
发帖时间2026-10-24
浏览次数290
回复次数3