;ARM处理器任务上下文的切换汇编语言函数OS_TSK_SW():;指令说明:STMFD,是按照高地址->低地址存储,并且指针往前-4. STMFD sp!,{pc} ; 保存当前任务PC的任务栈区STMFD SP!,{lr} ; 保存当前任务LR,即当前任务的返回地址,即任务栈区STMFD SP!,{ro-r12}; 保存R0...R12到任务栈区MRS R4,CPSR; R4用作中间暂存数据寄存器STMFD SP!,{R4}; 保存CPSR到任务栈区MRS R4,SPSR; R4用作中间暂存数据寄存器STMFD SP!{R4}; 保存SPSR到任务栈区LDR R4,addr_OSPrioCur; 将当前任务的优先级变量送入R4寄存器LDR R5,addr_OSPrioHighRby; 将保存就绪任务最高优先级的变量送入到R5的寄存器LDRB R6,[R5]; R5间接寻址,将就绪任务最高优先级的变量送入到R6寄存器STRB R6,[R4]; R4简洁寻址,将就绪任务的最高优先级赋给当前任务优先级变量;上述实现了INT8U整数变量的赋值:addr_OSPrioCur=addr_OSPrioHighRby;LDR R4,addr_OSTCBCur; 将指向当前任务TCB的指针地址存入到R4寄存器;此时R4的值为OSTCRCur指针的地址LDR R5,[R4]; R4间接寻址,将指向当前任务的TCB指针存入到R5寄存器;此时R5的值为OSTCBCur指针,即指向当前任务控制块的指针STR SP,[R5]; R5间接寻址,将处理器栈区指针寄存器(R13)的值;存入到当前任务TCB的起始地址(零偏移地址)LDR R6,addr_OSTCBHighBy; R6=就绪表中当前优先级最高任务的TCB指针的地址LDR R6,[R6]; 将就绪表中最高优先级任务TCB指针存入到R6中LDR SP,[R6]; 将HP任务TCB指针所指向的内存单元的值送入到Sp寄存器,;也就是将最高优先级任务TCB中保存的自用栈区指针存入Sp寄存器STR R6,[R4]; 将最高优先级任务TCB指针赋给当前任务指针变量;实现了TCB指针的赋值:OSTCBCur=OSTCBHighRby;以下指令把保存最高优先级任务自用栈区的各个寄存器弹出到CPU的各个寄存器LDRFD SP!,{R4}; 将栈顶的字元素弹出到R4寄存器中MSR SPSR_IRQ,R4; 该弹出字原先保存的SPSR_IRQ,从R4寄存器中进行恢复LDRFD SP!,{R4}; 将栈顶的字元素弹出到R4寄存器中 MSR CPSR_IRQ,R4; 该弹出字原先保存的CPSR_IRQ,从R4寄存器中进行恢复LDRFD SP!,{R0-R12,LR,PC}; 恢复R0-R12通用寄存器的值和LR和PC