U-Boot的问题.

[复制链接]
1937|1
 楼主| longwuyi 发表于 2012-5-9 10:58 | 显示全部楼层 |阅读模式
在U-Boot 的FIQ中断处理中有如下压栈程序:
01   .macro irq_save_user_regs
02   sub sp, sp, #S_FRAME_SIZE
03   stmia sp, {r0 - r12}   @ Calling r0-r12
04   add     r8, sp, #S_PC
05   stmdb   r8, {sp, lr}^                   @ Calling SP, LR
06   str     lr, [r8, #0]                    @ Save calling PC
07   mrs     r6, spsr
08   str     r6, [r8, #4]                    @ Save CPSR
09   str     r0, [r8, #8]                    @ Save OLD_R0
10   mov r0, sp
11   .endm
而对应的出栈程序如下:
12   .macro irq_restore_user_regs
13    ldmia sp, {r0 - lr}^   @ Calling r0 - lr
14   mov r0, r0
15   ldr lr, [sp, #S_PC]   @ Get PC
16   add sp, sp, #S_FRAME_SIZE
17   subs pc, lr, #4   @ return & move spsr_svc into cpsr
18  .endm
其中第03行在FIQ中断中, 则导致将FIQ的R8..R14入栈.
而第13行时, 直接将R8..R14恢复到User模式的R8..R14中,
这是否会破坏User模式下的堆栈啊????
lifuhua666666 发表于 2012-5-11 13:35 | 显示全部楼层
入栈与出栈模式相同,没有问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

61

帖子

0

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