EDA365电子论坛网

标题: OS_CPU_S.s 文件中有如下一段代码,其中有两句代码的作用不是很明白,请解说一下. [打印本页]

作者: Dollche    时间: 2023-1-5 10:24
标题: OS_CPU_S.s 文件中有如下一段代码,其中有两句代码的作用不是很明白,请解说一下.
在 OS_CPU_S.s 文件中有如下一段代码,其中有两句代码的作用不是很明白,请解说一下. OSIntCtxSw_1
, C8 a4 \1 s5 lLDR R4, [R6] ;获取新任务堆栈指针
, G" Y+ C5 J- @- `;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
" \: h, F6 v, b1 J# U;这两行代码有何作用呢 7 p. z9 P% H) F% H
ADD SP, R4, #68 ;17 寄存器 CPSR,OsEnterSum,R0-R12,LR,SP
" J! D1 h/ C  nLDR LR, [SP, #-8]
8 T: n6 y3 ^! m6 l+ @/ H# j8 F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   ~1 h. c+ j- h% t( d" s( w. b
MSR CPSR_c, #(NoInt | SVC32Mode) ;进入管理模式 2 A  _9 `- c. W# i% q  @) T3 q
MOV SP, R4 ;设置堆栈指针 % o/ ^; b! y: B: }$ ?' f6 n3 ~
LDMFD SP!,{R4, R5} ;CPSR,OsEnterSum
, Y2 l8 @% e+ n% B;恢复新任务的 OsEnterSum # }" V! s# {2 _, }! z
LDR R3, =OsEnterSum
; T5 l' v3 d7 n. Q& }STR R4, [R3] 2 F' ^; A; P( K2 n$ v
MSR SPSR_cxsf, R5 ;恢复 CPSR   }& s! }. F* A7 W1 F7 ~- f+ Q
LDMFD SP!, {R0-R12, LR, PC }^ ;运行新任务
  O  C6 R8 Z( D" k
/ S/ O9 ^, `$ ]3 O" g! R
作者: Terran    时间: 2023-1-5 10:59
这两条指令是在系统模式下恢复用户模式下的 LR;5 d! z1 R; D4 ^( t8 R2 @/ Y
可以看一看《ARM 微控制器基础与实战》6.4.9 节,就明白了。
作者: niubility    时间: 2023-1-5 13:29
移植UCOS最主要的就是Os_cpu_a.s和Os_cpu_c.c




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2