共2条
1/1 1 跳转至页
S3C4510B 哪个哥哥精通S3C4510B的汇编,麻烦请教一个问题
问
我在编写S3C4510B处理器进程切换问题时,遇到一些问题理解不到,望大哥赐教。
书上说进程切换在中断服务程序(IRQ)保存老进程的寄存器到该进程的堆栈,然后将新进程的指针赋给SP,用LDMFD sp!, {r0-r12, lr, pc}指令将SP所指向的堆栈单元内容弹到用户模式的寄存器中,中断服务程序结束,开始在用户模式下执行新进程。
这里有个问题,我认为是这样的:IRQ下的SP和用户模式下的SP不是同一物理寄存器,IRQ的SP指针变了,但用户模式下的SP并没改变,模式切换回来时,用户模式下的SP的值并不是正确的值,所以书上的代码这样写,我觉得有问题。
麻烦大哥指导一下小弟。
谢谢
答 1: 应该是没问题的用户模式与IRQ模式有着各自的SP,所以你所说的问题不会存在的.
答 2: 不懂呢小弟还是不懂,LDMFD sp!, {r0-r12, lr, pc}改变的是IRQ模式下的SP,而用户模式下的SP并没有被置成IRQ模式下SP的值,那在下次保存寄存器到用户模式下的SP所指地址时就不对了啊? 答 3: 我的理解STMFD SP!, {R0-R7, LR}
是保存的用户环境
进入irq后使用的是irq环境,即irq堆栈
irq结束后自动切换回用户模式
然后
LDMFD SP!, {R0-R7, LR}
恢复的用户环境
所以在进入irq的前后使用的用户堆栈,irq部分使用的是irq堆栈,不冲突(如你把usr和irq堆栈设成一样,就冲突了)
答 4: 楼上的哥哥不对喔我查了资料,STMFD SP!, {R0-R12, LR}指令应为STMFD SP!, {R0-R12, LR}^时,其中的R0-R7和LR才是用户模式下的寄存器,而指令中的SP是当前特权模式下的寄存器(即IRQ模式下的SP),所以该指令并没有将用户模式下的寄存器保存到用户模式SP所指向地址中。
答 5: 哪个哥哥再帮忙看一下哪个哥哥再帮忙看一下 答 6: ?用户模式下的SP为什么要改变?
如果在中断处理程序中改变了用户模式下sp,则从中断处理程序返回的时候用户模式的程序就会出问题了。
书上说进程切换在中断服务程序(IRQ)保存老进程的寄存器到该进程的堆栈,然后将新进程的指针赋给SP,用LDMFD sp!, {r0-r12, lr, pc}指令将SP所指向的堆栈单元内容弹到用户模式的寄存器中,中断服务程序结束,开始在用户模式下执行新进程。
这里有个问题,我认为是这样的:IRQ下的SP和用户模式下的SP不是同一物理寄存器,IRQ的SP指针变了,但用户模式下的SP并没改变,模式切换回来时,用户模式下的SP的值并不是正确的值,所以书上的代码这样写,我觉得有问题。
麻烦大哥指导一下小弟。
谢谢
答 1: 应该是没问题的用户模式与IRQ模式有着各自的SP,所以你所说的问题不会存在的.
答 2: 不懂呢小弟还是不懂,LDMFD sp!, {r0-r12, lr, pc}改变的是IRQ模式下的SP,而用户模式下的SP并没有被置成IRQ模式下SP的值,那在下次保存寄存器到用户模式下的SP所指地址时就不对了啊? 答 3: 我的理解STMFD SP!, {R0-R7, LR}
是保存的用户环境
进入irq后使用的是irq环境,即irq堆栈
irq结束后自动切换回用户模式
然后
LDMFD SP!, {R0-R7, LR}
恢复的用户环境
所以在进入irq的前后使用的用户堆栈,irq部分使用的是irq堆栈,不冲突(如你把usr和irq堆栈设成一样,就冲突了)
答 4: 楼上的哥哥不对喔我查了资料,STMFD SP!, {R0-R12, LR}指令应为STMFD SP!, {R0-R12, LR}^时,其中的R0-R7和LR才是用户模式下的寄存器,而指令中的SP是当前特权模式下的寄存器(即IRQ模式下的SP),所以该指令并没有将用户模式下的寄存器保存到用户模式SP所指向地址中。
答 5: 哪个哥哥再帮忙看一下哪个哥哥再帮忙看一下 答 6: ?用户模式下的SP为什么要改变?
如果在中断处理程序中改变了用户模式下sp,则从中断处理程序返回的时候用户模式的程序就会出问题了。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? |
打赏帖 | |
---|---|
老胖子聊电路--分析一个反馈电路被打赏50分 | |
放大↔震荡被打赏50分 | |
【换取手持数字示波器】RTduino驱动ssd1306+sht31温湿度计被打赏40分 | |
【换取手持数字示波器】称植国产开源TobudOS到雅特力AT32F425被打赏40分 | |
【分享评测,赢取加热台】+Telink-泰凌微电子B91点灯篇被打赏20分 | |
【换取手持数字示波器】+精英板驱动LCD屏被打赏50分 | |
【换取手持数字示波器】+DFR0216全彩灯带WS2812示例分享被打赏50分 | |
【换取手持数字示波器】安装雅特力国产IDE-AT32IDE被打赏30分 | |
【换取手持数字示波器】+DFR0654板卡驱动数码管和串口功能分享被打赏50分 | |
【换取手持数字示波器】+DFPlayerMini模块推喇叭示例分享被打赏50分 |