微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在生成的程序集中,Cortex-M中断处理程序存在死循环?

如何解决为什么在生成的程序集中,Cortex-M中断处理程序存在死循环?

我正在使用MDK uVision IDE学习Cortex-M。我写了一个简单的SysTick_Handler()来代替WEAK认值SysTick_Handler(),这是一个简单的死循环。

我的SysTick_Handler()

enter image description here

反汇编:

enter image description here

我对突出显示的装配线感到困惑。这只是一个死循环。

为什么在那儿?尽管我已经用自己的SysTick_Handler覆盖了WEAK认实现,但为什么工具链仍然生成它?

我仍然可以在该行上放置一个断点,并可以将其击中。在那种情况下,我的代码将永远不会执行。

但是奇怪的是,如果我删除了该行的断点,则可以访问我的代码。那怎么可能?

解决方法

(感谢社区提供的所有提示。我想我现在可以解释它。)

死循环是我的main()函数的一部分,如下所示。 main()函数在同一C文件中恰好位于我的SysTick_Handler上方。

int main (void)
{
    LED_Initialize();
    SysTick->VAL = 0x9000;                                                                                   
    //Start value for the sys Tick counter
    SysTick->LOAD = 0x9000;                                                                                  
    //Reload value 
    SysTick->CTRL = SYSTICK_INTERRUPT_ENABLE|SYSTICK_COUNT_ENABLE;  //Start and enable interrupt
    while(1)
    {
        ;  // <========= This is the dead loop I saw!
    }
}

为再次确认,我将while循环修改为以下内容:

int main (void)
{
    volatile int32_t jj = 0;
    LED_Initialize();
    SysTick->VAL = 0x9000;                                                                                  //Start value for the sys Tick counter
    SysTick->LOAD = 0x9000;                                                                                 //Reload value 
    SysTick->CTRL = SYSTICK_INTERRUPT_ENABLE|SYSTICK_COUNT_ENABLE;  //Start and enable interrupt
    while(1)
    {
        ;
        jj+=0x12345; // <====== add some landmark value
    }
}

现在生成的代码是这样的:

enter image description here

尽管它仍然放在SysTick_Handler下。我在此处放置一个断点以检查实际情况:

enter image description here

enter image description here

R1是常量0x12345R0是局部变量jj。我们可以看到R1确实包含界标值0x12345,该界标值已添加到R0jj)中。因此它必须是while(1)main()循环的一部分。

因此,反汇编是正确的。只是调试器未能在源代码与反汇编之间提供正确的交错。

顺便说一句,记住修改代码后要重建目标,否则uVision IDE调试器将不会反映最新的更改...。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。