565715470 发表于 2014-4-8 23:15:20

cortex-m3 当前中断优先级存在哪里

2.4.1可嵌套中断支持
    可嵌套中断支持的作用范围很广,覆盖了所有的外部中断和绝大多数系统异常。外在表现是,这些异常都可以被赋予不同的优先级。当前优先级被存储在xPSR的专用字段中。当一个异常发生时,硬件会自动比较该异常的优先级是否比当前的异常优先级更高。如果发现来了更高优先级的异常,处理器就会中断当前的中断服务例程(或者是普通程序),而服务新来的异常——即立即抢占。

上面这段话是在《Cortex-m3权威指南》中文版这本书上摘录下来的,里面说:“当前优先级被存储在xPSR的专用字段中”。但我看了一下xPSR中各个为的说明如下(英文版里名截的图)


里面没有存储当前优先级的位。

然后我就查了一下上面加粗的那段话的英文原版:
Nested Interrupt Support
The NVIC provides nested interrupt support. All the external interrupts and most of the system exceptions can be programmed to different priority levels. When an interrupt occurs, the NVIC compares the priority of this interrupt to the current running priority level. If the priority of the new interrupt is higher than the current level, the interrupt handler of the new interrupt will override the current running task.

上面没有提到xPSR。然后我想《当前优先级被存储在xPSR的专用字段中》这短话可能是翻译者加上去的。

问题来了,当前中断或异常的优先级到底存到了哪里????????

study_hardware 发表于 2014-4-8 23:42:51

权威指南讲这么详细 回头看下! 参考手册里没有吗?

wuzhujian 发表于 2014-4-9 02:52:12

翻译者的意思应该是:当前优先级的异常号存储在xPSR中。

xieyudi 发表于 2014-4-9 04:00:53

本帖最后由 xieyudi 于 2014-4-9 04:21 编辑

一般的CPU的状态寄存器应该不保存优先级.
关于xPSR可参考: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337e/ch02s03s02.html

可以在发生中断后通过中断向量来查询NVIC里的IPRx来获得优先级.
可以参考ST的PM0056, 125页, NVIC下的IPRx.




When an interrupt occurs, the NVIC compares the priority of this interrupt to the current running priority level.
当前优先级被存储在xPSR的专用字段中。当一个异常发生时,硬件会自动比较该异常的优先级是否比当前的异常优先级更高。
原书强调是NVIC在比较优先级, 人家也没说xPSR, 所以理解起来没有问题. 这个翻译的狗屁不通不说, 还喜欢胡诌. 所以这种东西要么不看要么看原版.

565715470 发表于 2014-4-9 11:13:07

xieyudi 发表于 2014-4-9 04:00
一般的CPU的状态寄存器应该不保存优先级.
关于xPSR可参考: http://infocenter.arm.com/help/index.jsp?topi ...

谢谢你的回答!

你下面的截图中的寄存器应该是设置中断优先级时用的(我不敢肯定啊{:lol:} )。我在查查别的相关资料,如果能查到再回复你。

565715470 发表于 2014-4-9 11:15:13

wuzhujian 发表于 2014-4-9 02:52
翻译者的意思应该是:当前优先级的异常号存储在xPSR中。

我感觉也是

565715470 发表于 2014-4-9 11:16:40

study_hardware 发表于 2014-4-8 23:42
权威指南讲这么详细 回头看下! 参考手册里没有吗?

没看参考手册{:sweat:},我看看
页: [1]
查看完整版本: cortex-m3 当前中断优先级存在哪里