zoukankan      html  css  js  c++  java
  • cortem3中的pc值的问题

            在Cortex-M3中指令是3级流水线,出于对Thumb代码的兼容的考虑,读取pc时,会返回当前指令地址+4的值。但是在进入中断服务程序后,压入栈的地址是pc,而返回时也是用作pc,那么pc的值如果是当前指令加4的话就有可能返回后就漏掉一条指令。
            但是事实上中断服务程序可以完美的返回。那么这中间就一定存在着某些诡异的地方。
            下面来看一段测试代码:

        我们可看出,pc总是指向下一条指令,那么书中的“出于对Thumb代码的兼容的考虑,读取pc时,会返回当前指令地址+4的值”的关键在于“读取”2字,如果我们使用指令(如mov)读了PC,那么返回给我们地址就是当前地址+4,如果是单片机自动压栈那么就不属于使用指令读取的范畴,也就是说压入栈中的PC值就真正的值。

  • 相关阅读:
    线程
    unix架构
    Unix命令
    可重入函数reentrant function
    Eclipse 中 program arguments 与 VM arguments 的区别
    Java中Generics的使用
    Java的Reflection机制
    Java按值传递、按引用传递
    Java label
    LeetCode Merge Intervals
  • 原文地址:https://www.cnblogs.com/findstr/p/2803706.html
Copyright © 2011-2022 走看看