You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cortex-M0+设备突发SysTick死循环导致中断失效的偶发Bug排查求助

Cortex-M0+设备突发SysTick死循环导致中断失效的偶发Bug排查求助

各位大佬好,想请教一个困扰我的偶发Bug问题:

我负责的一款嵌入式设备已经稳定运行好几年了,这段和SysTick相关的代码也从来没做过修改,但最近突然碰到了一次所有中断都失效的诡异情况。

经过一番排查,用GDB调试后发现程序卡在了一个延时函数的while循环里,就是下面这个delay_ns函数中等待COUNTFLAG的那一行:

void delay_ns(uint32_t ns)
{
    SysTick->CTRL = 0;
    SysTick->VAL = 0;

    SysTick->LOAD = 16 * ns; // 16对应16MHz时钟
    SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;

    while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)) // 程序卡在这里
        ;
    SysTick->CTRL = 0;
}

我本身不是专职MCU开发的,正在尽力梳理问题的来龙去脉,目前已知的关键信息:

  • 设备使用的是Cortex-M0+内核
  • 这个延时函数的逻辑是通过配置SysTick定时器来实现纳秒级延时,核心是等待SysTick_CTRL寄存器的COUNTFLAG位被置位,正常情况下这个逻辑一直稳定运行

想请教各位大佬:有没有碰到过类似的偶发情况?会不会是SysTick的某些异常状态导致COUNTFLAG一直无法置位?或者有没有硬件层面的因素可能触发这个问题?

备注:内容来源于stack exchange,提问作者mescande

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 10:43:15