共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电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
分享汽车通信和多媒体总线结构被打赏20分 | |
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
NUCLEO-U083RC学习历程38+串口通过队列的方式输出两个字符串被打赏20分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
分享电控悬架的结构与工作原理(一)被打赏20分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 |