共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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |