论坛» 嵌入式开发» MCU

关于uc/osII在S3C44B0X上的移植中任务调度的问题?

菜鸟
2006-08-01 23:59 1楼

邵贝贝的书上说,任务开始调度时,(1)首先执行一条类似中断功能的指令,(2)接着保存CPU的所有寄存器的值,即压到当前任务的堆栈中;(3)然后获得新任务的堆栈指针,(4)并把堆栈内的CPU寄存器的值弹出来,传给CPU各寄存器,(5)最后执行一条中断返回指令,即完成了任务切换。

但我在网上找了一段任务切换的代码,发现上述介绍的过程没有(1)这个步骤,只有后面的四步。不知道为什么?下面是那段代码,请各位指点一下:

EXPORT OSCtxSw
IMPORT OSPrioCur
IMPORT OSPrioHighRdy
IMPORT OSTCBCur
IMPORT OSTaskSwHook
IMPORT OSTCBHighRdy

OSCtxSw
STMFD sp!, {lr} ; push pc (lr is actually be pushed in place of PC)
STMFD sp!, {r0-r12,lr} ; push lr & register file

MRS r4, cpsr
STMFD sp!, {r4} ; push current psr

LDR r4, =OSTCBCur ; Get current task TCB address
LDR r5, [r4]
STR sp, [r5] ; store sp in preempted tasks s TCB

IMPORT OSTaskSwHook
OSIntCtxSw
BL OSTaskSwHook

LDR r4, =OSTCBHighRdy
LDR r4, [r4]
LDR r5, =OSTCBCur
STR r4, [r5] ; OSTCBCur = OSTCBHighRdy

LDR r6, =OSPrioHighRdy
LDRB r6, [r6]
LDR r5, =OSPrioCur
STRB r6, [r5] ; OSPrioCur = OSPrioHighRdy

LDR sp, [r4]
LDMFD sp!, {r4} ; pop new task cpsr
MSR cpsr_cxsf, r4
LDMFD sp!, {r0-r12,lr,pc} ; pop new task r0-r12,lr & pc

谢谢~~~~~~~~

菜鸟
2006-08-02 04:08 2楼

期待~~~~~~~~~~~~~~~~~~

菜鸟
2006-08-02 23:41 3楼

再ding~~~~~~~~

菜鸟
2006-08-03 21:22 4楼

如果没记错的话,OSCtxSw是在进了中断之后才调用的。

菜鸟
2006-08-03 22:16 5楼
但我手头上的这个移植案例不是这样的,OSCtxSw直接由OS_Sched调用,在OSCtxSw内也没有执行一条类似中断的指令。
菜鸟
2006-08-03 22:25 6楼

找到了这个移植案例的Doc文档,里面介绍说,在实现任务切换时本案例没有使用软件中断。

ryansheng版主,你有没有使用了软件中断来实现任务切换的移植案例啊?能不能发来看看~~,多谢~~

lh_tian@yahoo.com.cn

菜鸟
2006-08-08 02:18 7楼
¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬`
共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]