UCOS 中的任务切换问题

opposever 2009-10-08 08:45:51
UCOS任务切换用的是汇编代码,看不太懂


#define uCOS 0x80 /* Interrupt vector # used for context switch */

#define OS_TASK_SW() asm INT uCOS


基于PC的汇编代码


_OSCtxSw PROC FAR
;
PUSHA ; Save current task's context
PUSH ES ;
PUSH DS ;
;
MOV AX, SEG _OSTCBCur ; Reload DS in case it was altered
MOV DS, AX ;
;
LES BX, DWORD PTR DS:_OSTCBCur ; OSTCBCur->OSTCBStkPtr = SS:SP
MOV ES:[BX+2], SS ;
MOV ES:[BX+0], SP ;
;
CALL FAR PTR _OSTaskSwHook ; Call user defined task switch hook
;
MOV AX, WORD PTR DS:_OSTCBHighRdy+2 ; OSTCBCur = OSTCBHighRdy
MOV DX, WORD PTR DS:_OSTCBHighRdy ;
MOV WORD PTR DS:_OSTCBCur+2, AX ;
MOV WORD PTR DS:_OSTCBCur, DX ;
;
MOV AL, BYTE PTR DS:_OSPrioHighRdy ; OSPrioCur = OSPrioHighRdy
MOV BYTE PTR DS:_OSPrioCur, AL ;
;
LES BX, DWORD PTR DS:_OSTCBHighRdy ; SS:SP = OSTCBHighRdy->OSTCBStkPtr
MOV SS, ES:[BX+2] ;
MOV SP, ES:[BX] ;
;
POP DS ; Load new task's context
POP ES ;
POPA ;
;
IRET ; Return to new task
;
_OSCtxSw ENDP

PAGE ; /*$PAGE*/


看它的意思好像是调用了0x80的中断,然后不知道怎么跑的了?汇编代码也看不太懂。。。
...全文
129 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
opposever 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pigeon0411 的回复:]
楼主是在X86的PC上跑的?
[/Quote]
是啊,在PC上,用的BC45编译和调试的。主要是为了学习一下操作系统。
opposever 2009-10-08
  • 打赏
  • 举报
回复
貌似找到设置中断向量的地方了

PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-II's context switch vector */


void PC_VectSet (INT8U vect, void (*isr)(void))
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
INT16U *pvect;


pvect = (INT16U *)MK_FP(0x0000, vect * 4); /* Point into IVT at desired vector location */
OS_ENTER_CRITICAL();
*pvect++ = (INT16U)FP_OFF(isr); /* Store ISR offset */
*pvect = (INT16U)FP_SEG(isr); /* Store ISR segment */
OS_EXIT_CRITICAL();
}



看了好几天UCOS了,还是感觉乱乱的,感觉看到汇编的代码有点怕。。。
大家学UCOS的时候有没有什么好的方法?
pigeon0411 2009-10-08
  • 打赏
  • 举报
回复
楼主是在X86的PC上跑的?
huabinsir 2009-10-08
  • 打赏
  • 举报
回复
帮顶一下.

低级的CPU(ARM7或更低)是不是按时间片(固定时间)自动进行任务切换的? 请指正.

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧