[WDT-3.15] ESP32 芯片特定条件下会出现 live lock 导致中断看门狗错误
描述
使用芯片版本 v3.0,当程序同时满足下列条件时,会出现 live lock(活锁)现象,导致 CPU 一直处于访存状态,不能继续执行指令。
双核系统;
四条访问外存的指令/数据总线 (IBUS/DBUS) 中,有 3 条总线同时发起对同一个 cache 组的访问请求,并且三个 cache 请求均缺失。
变通方法
发生 live lock 时,软件主动或被动识别并解锁 cache line 竞争,之后两个核按队列节拍分时完成各自的 cache 操作,解锁 live lock。详细过程如下:
当两个核执行的指令均不在代码临界区中时出现 live lock,系统各类型中断会主动解除 cache line 竞争,解锁 live lock;
当两个核执行的指令位于代码临界区中时出现 live lock,在临界区中,系统会屏蔽 3 级及以下中断。因此软件预先为两个核各设置一个高优先级(4 级或 5 级)中断,将它们绑定到同一个定时器,并选择合适的定时器超时门限。由于 live lock 产生的定时器超时中断会迫使两个核均进入高优先级中断处理程序,从而释放两个核的 IBUS 以达到解锁 live lock 目的。解锁过程通过 3 个阶段完成:
第 1 阶段两个核均进行等待以清空 CPU write buffer;
第 2 阶段一个核 (Core 0) 等待,另一个核 (Core 1) 执行;
第 3 阶段 Core 1 等待,Core 0 执行。
解决方案
暂无 修复计划。