|
发表于 2009-2-24 16:35:11
|
显示全部楼层
bluelucky 你好:
182页有如下叙述:
redirect_handler
PUSH {LR}
SVC #0 ; 呼叫系统服务,用于把特权级别改为用户级
BL User_IRQ_Handler
SVC #1 ; 执行完中断处理后,回到特权级
POP {PC} ; 启动本次中断的返回序列
183页如下叙述
svc_service_1 ; 1号服务:从线程模式+PSP返回到handler模式
MRS R0, PSP ; 读取PSP到R0,以便于后续的一系列归位处理
LDR R1, [R0, #0x18] ; 读取压入PSP中的返回地址(即svc #1后面的
; POP {PC})
STR R1, [SP, #0x18] ; 因为将要返回到handler模式,所以把它转移到MSP
ADD R0, R0, #0x20 ; 把PSP的值归位——刚响应外部中断时的值
MSR PSP, R0 ; 用归位后的值更新PSP
其中“LDR R1, [R0, #0x18] ; 读取压入PSP中的返回地址(即svc #1后面的
; POP {PC})”我觉得表述不准确
(原文件名:1.JPG)
我觉得POP{PC}中的PC是图中小红点的地址,而LDR R1, [R0, #0x18]替换的返回值地址是大红点的地址。
个人观点,请楼主参考。
aaa1982 |
|