这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于uc/osII在S3C44B0X上的移植中任务调度的问题?

共7条 1/1 1 跳转至

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

菜鸟
2006-08-01 23:59:29     打赏

邵贝贝的书上说,任务开始调度时,(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

谢谢~~~~~~~~




关键词: 关于     S3C44B0X     移植     任务     调度     问题    

菜鸟
2006-08-02 04:08:00     打赏
2楼

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


菜鸟
2006-08-02 23:41:00     打赏
3楼

再ding~~~~~~~~


菜鸟
2006-08-03 21:22:00     打赏
4楼

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


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

菜鸟
2006-08-03 22:25:00     打赏
6楼

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

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

lh_tian@yahoo.com.cn


菜鸟
2006-08-08 02:18:00     打赏
7楼
¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬`

共7条 1/1 1 跳转至

回复

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