[ZLG-ARM] 用户模式下开关中断问题

[复制链接]
 楼主| xiuzhou 发表于 2008-1-19 09:59 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;《深入浅出》中写到:用户模式不能直接切换到其他模式,只能通过SWI进入特权模式。<br />&nbsp;&nbsp;当运行在用户模式时,企图通过调用IRQ开关函数来控制中断的开关,但是没有成功。程序如下:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;IRQ_En(&nbsp;void&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;__asm<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MRS&nbsp;&nbsp;temp,&nbsp;CPSR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BIC&nbsp;&nbsp;temp,&nbsp;temp,&nbsp;#0x80<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;CPSR_c,&nbsp;temp<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />&nbsp;&nbsp;跟踪发现当执行到MSR&nbsp;&nbsp;CPSR_c,&nbsp;temp时,CPSR_c的内容并不改变。书上只是说不能改变模式,并没有说不可以改变其他标志位。是不是CPSR_c是作为一个整体,在用户模式下不能被修改?<br />&nbsp;&nbsp;若果在其他模式下,例如系统模式,运用上面的函数可以正常开启IRQ中断。
dld2 发表于 2008-1-19 10:15 | 显示全部楼层

用户模式下不能修改CPSR的control bits

包括:I、F、T、M0到M4。
 楼主| xiuzhou 发表于 2008-1-19 11:38 | 显示全部楼层

zlgarm_wgg,你好

还有一个疑问:当ARM从一种模式进入到另外一中模式时,例如从系统模式进入管理模式,ARM会自动的将CPSR的值备份到SPSR中,当退出管理模式时,ARM会自动的将SPSR中的内容复制到CPSR中。<br />不知道我上面的理解是否正确,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

33

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

16

主题

33

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部