ucOS-II基于ARM920T的OSCtxSw实现分析
来源:互联网 发布:linux中的echo命令 编辑:程序博客网 时间:2024/04/29 09:36
基于ARM920T的OSCtxSw实现分析:
首先必须了解,在将ucos-II移植到ARM920T时,使用了如下结构的任务栈:
程序清单:基于ARM920T的OSCtxSw实现分析 注意:ARM需手动保存pc和psw |
OSCtxSw ; Special optimised code below: ;1、根据任务栈结构,分别压栈,保存旧任务的现场 stmfd sp!,{lr} ; push pc (lr should be pushed in place of PC) stmfd sp!,{r0-r12,lr} ; push lr & register file mrs r4,cpsr stmfd sp!,{r4} ; push current psr mrs r4,spsr stmfd sp!,{r4} ; push current spsr ; 2、OSPrioCur = OSPrioHighRdy ldr r4,=OSPrioCur ldr r5,=OSPrioHighRdy ldrb r6,[r5] strb r6,[r4] ; 3、Get current task TCB address:r5= OSTCBCur ldr r4,=OSTCBCur; r4 = &OSTCBCur ldr r5,[r4] ;4、OSTCBCur->OSTCBStkPtr = SP; str sp,[r5] ; store sp in preempted tasks's TCB bl OSTaskSwHook ; call Task Switch Hook ; 5、Get highest priority task TCB address:r6= OSTCBHighRdy ldr r6,=OSTCBHighRdy ldr r6,[r6] ; 6、SP = OSTCBHighRdy ->OSTCBStkPtr; ldr sp,[r6] ; get new task's stack pointer ; 7、OSTCBCur = OSTCBHighRdy str r6,[r4] ; set new current task TCB address ;8、根据任务栈结构,分别出栈,恢复新任务的现场 ldmfd sp!,{r4} ; pop new task's spsr msr SPSR_cxsf,r4 ldmfd sp!,{r4} ; pop new task's psr msr CPSR_cxsf,r4 ldmfd sp!,{r0-r12,lr,pc} ; pop new task's r0-r12,lr & pc |
- ucOS-II基于ARM920T的OSCtxSw实现分析
- ucOS-II基于ARM920T的OSIntCtxSw实现分析
- ucOS-II基于ARM920T的中断处理过程
- 移植uCOS ii到ARM920T
- 移植uCOS ii到ARM920T
- 基于ADuC7026的uCOS-II系统分析
- 基于S3C44B0(ARM7TDI)的uCOS-II移植
- 基于uCOS-II的UDP网络编程
- 基于uCOS-II的UDP网络编程
- 基于ucos-ii的文件系统设计
- 基于ucos ii的文件系统设计
- 基于uCOS-II的UDP网络编程
- 基于uCOS-II的RTC时钟
- 嵌入式实时操作系统ucos ii的分析
- 嵌入式实时操作系统uCOS II的分析
- 嵌入式实时操作系统uCOS II的分析
- 嵌入式实时操作系统ucos ii的分析
- ucos ii 文件分析
- 僵尸网络:大些并不总是好事
- HTTP协议中的Tranfer-Encoding|HTTP,协议,Tranfer-Encoding,chunked编码,解析-中国源码网
- 单件模式中拷贝构造函数也需要私有化
- 《Joomla!建站步步通》已经发表样章发表到PHPER杂志
- 很乱,随便写写
- ucOS-II基于ARM920T的OSCtxSw实现分析
- Oracle创建用户
- 如何把一个用户加入sodu组
- Windows XP下无法启动oracleDBConsole的解决方案(一)
- 众名家谈程序员职业规划
- ucOS-II基于ARM920T的OSIntCtxSw实现分析
- Going Down 吗
- javascript中的闭包
- ABAP 用BAPI上传数据过程