共2条
1/1 1 跳转至页

问
我是一新手最近在看ARM的结构体系,有一不明白处:
1〉ARM支持3/5级指令流水线。以三级流水线为例指令周期分为:取指令,译码,指令执行。大部分的的时刻,ARM内核这三个模块都会在执行。
2〉ARM要处理异常:
异常进入要保护断点:
A:把PC送入R14中,修改PC
B:保护用户寄存器
C:把CPSR送入SPSR中
异常退出要恢复断点:
A:恢复用户寄存器
B:恢复CPSR
C:把PC值修改为程序相应异常时的上条指令
注:异常退出时B,C同时处理方法不讨论
疑点:在1〉2〉存在的条件下,当一条指令在执行,那就有一条在译码,有一条在取指(不考虑转移指令)。在异常退出时的过程中PC跳回到发生异常时执行指令的上一条指令(此指令为寄存器操作指令),那么会不会影响用户寄存器中的值。如果我的理解有误,希望大虾们指出,谢谢。
答 1: 没有人知道吗?在线等啊。没有人知道吗?在线等啊。 答 2: 恢复用户寄存器是由程序完成的所谓恢复是指在中断服务程序中用到的寄存器,这对编程人员是已知的(即前面保存过的寄存器) 答 3: Re:bald谢谢,bald兄的回复,如果对于不是流水线的内核,是比较容易理解的。
我现在的疑点是,ARM内核中它采用的是流水线,假如,在PC=X时有中断。而它的上一条指令是会影响用户寄存器的。这时保存的寄存器数据在返回到PC==X-4(32BIT)会受到影响啊。! 答 4: 怎么就没有人回复了呢。哪位大虾帮我解答解答啊。怎么就没有人回复了呢。哪位大虾帮我解答解答啊。 答 5: 没看懂你讲的什么意思没看懂你讲的什么意思。
“在PC=X时有中断。而它的上一条指令是会影响用户寄存器的。这时保存的寄存器数据在返回到PC==X-4(32BIT)会受到影响啊” 答 6: 取指过程是不会影响到用户寄存器的PC=X-4的那一条指令属于尚未执行的指令,所以这一条指令本身不会影响到用户寄存器。而中断前用户寄存器的内容则应该是执行完PC=X-8后的的状态。 答 7: 取指和执行是不同PC指向正在取指的指令,而当前执行回写(指令执行完成)的是它前面两个字处的指令。
跳转的时候不是将PC传递到LR,而是PC-4;所以子程返回时直接MOV PC,R14就可以了。
其它模式下就有区别了,比如FIQ中断发生时,为了加快进入中断,就没有默认执行PC-4;所以执行SUSB PC,R14_irq,#4;
参看返回指令表大致就可以猜想发生这些跳转、调用时传到LR中的到底是什么了。 答 8: 答异常返回到下一条指令的地址,不是上一条指令。有的异常返回到正在执行的指令。
1〉ARM支持3/5级指令流水线。以三级流水线为例指令周期分为:取指令,译码,指令执行。大部分的的时刻,ARM内核这三个模块都会在执行。
2〉ARM要处理异常:
异常进入要保护断点:
A:把PC送入R14中,修改PC
B:保护用户寄存器
C:把CPSR送入SPSR中
异常退出要恢复断点:
A:恢复用户寄存器
B:恢复CPSR
C:把PC值修改为程序相应异常时的上条指令
注:异常退出时B,C同时处理方法不讨论
疑点:在1〉2〉存在的条件下,当一条指令在执行,那就有一条在译码,有一条在取指(不考虑转移指令)。在异常退出时的过程中PC跳回到发生异常时执行指令的上一条指令(此指令为寄存器操作指令),那么会不会影响用户寄存器中的值。如果我的理解有误,希望大虾们指出,谢谢。
答 1: 没有人知道吗?在线等啊。没有人知道吗?在线等啊。 答 2: 恢复用户寄存器是由程序完成的所谓恢复是指在中断服务程序中用到的寄存器,这对编程人员是已知的(即前面保存过的寄存器) 答 3: Re:bald谢谢,bald兄的回复,如果对于不是流水线的内核,是比较容易理解的。
我现在的疑点是,ARM内核中它采用的是流水线,假如,在PC=X时有中断。而它的上一条指令是会影响用户寄存器的。这时保存的寄存器数据在返回到PC==X-4(32BIT)会受到影响啊。! 答 4: 怎么就没有人回复了呢。哪位大虾帮我解答解答啊。怎么就没有人回复了呢。哪位大虾帮我解答解答啊。 答 5: 没看懂你讲的什么意思没看懂你讲的什么意思。
“在PC=X时有中断。而它的上一条指令是会影响用户寄存器的。这时保存的寄存器数据在返回到PC==X-4(32BIT)会受到影响啊” 答 6: 取指过程是不会影响到用户寄存器的PC=X-4的那一条指令属于尚未执行的指令,所以这一条指令本身不会影响到用户寄存器。而中断前用户寄存器的内容则应该是执行完PC=X-8后的的状态。 答 7: 取指和执行是不同PC指向正在取指的指令,而当前执行回写(指令执行完成)的是它前面两个字处的指令。
跳转的时候不是将PC传递到LR,而是PC-4;所以子程返回时直接MOV PC,R14就可以了。
其它模式下就有区别了,比如FIQ中断发生时,为了加快进入中断,就没有默认执行PC-4;所以执行SUSB PC,R14_irq,#4;
参看返回指令表大致就可以猜想发生这些跳转、调用时传到LR中的到底是什么了。 答 8: 答异常返回到下一条指令的地址,不是上一条指令。有的异常返回到正在执行的指令。
共2条
1/1 1 跳转至页
回复
打赏帖 | |
---|---|
C语言函数宏的三种封装方式被打赏50分 | |
【STM32F769】记一次由于开启D-Cache之后DMA数据传输出错的问题查找与解决被打赏35分 | |
嵌入式LinuxC语言程序调试和宏使用技巧被打赏50分 | |
让代码中包含最新的编译时间信息被打赏50分 | |
【分享开发笔记,赚取电动螺丝刀】STM32F769LVGL优化显示被打赏26分 | |
rtthread硬件加密--2crc加密分析被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】STM32F769驱动ST7789以及显示优化被打赏36分 | |
【分享开发笔记,赚取电动螺丝刀】S32K146 PAL模拟I2C驱动适配被打赏23分 | |
我想要一部加热台+电源硬件设计规范被打赏16分 | |
我想要一部加热台+LED背光驱动芯片RT9293知识被打赏18分 |