PendSV_Handler

参考野火的程序:

; OSTCBCurPtr = OSTCBHighRdyPtr;

LDR     R0, = OSTCBCurPtr                 ; 加载 OSTCBCurPtr 指针的地址到R0,这里LDR属于伪指令

分析:运行后R0=0x20000018=&OSTCBCurPtr

LDR     R1, = OSTCBHighRdyPtr             ; 加载 OSTCBHighRdyPtr 指针的地址到R1,这里LDR属于伪指令

分析:R1=0x2000001C=&OSTCBHighRdyPtr

LDR     R2, [R1]                          ; 加载 OSTCBHighRdyPtr 指针到R2,这里LDR属于ARM指令

分析:R2=0x20000008=&Task1TCB=OSTCBHighRdyPtr

STR     R2, [R0]                          ; 存储 OSTCBHighRdyPtr 到 OSTCBCurPtr

分析:OSTCBCurPtr=R2=0x20000008==OSTCBHighRdyPtr

LDR     R0, [R2]                          ; 加载 OSTCBHighRdyPtr 到 R0

分析:R0 = 0x20000038 = OSTCBCurPtr->StkPtr = &Task1Stk[4] (初始化后剩余的栈顶地址)

LDMIA   R0!, {R4-R11}                     ; 加载需要手动保存的信息到CPU寄存器R4-R11

分析:R0 = 0x20000058 = &Task1Stk[12] (加载R4-R11共8个寄存器,R0自动增加4*8=32;0x38+0x20=0x58)

MSR     PSP, R0                           ; 更新PSP的值,这个时候PSP指向下一个要执行的任务的堆栈的栈底(这个栈底已经加上刚刚手动加载到CPU寄存器R4-R11的偏移)

分析:PSP = 0x20000058

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值