⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tasksw16.s

📁 ucos在摩托罗拉16位微控制器68hc16上的移植
💻 S
字号:
**************************************************************************
*                                    uCOS
*            Microcomputer Real-Time Multitasking Operating System
*
*             (c) Copyright 1992, Jean J. Labrosse, Plantation, FL
*                              All Rights Reserved
*
*
*                         MC68HC16 Specific code
*
* File :  tasksw16.s
* By   :   Gary Schneider
***************************************************************************

             export OSStartHighRdy
             export OSCtxSw
             export OSIntCtxSw

             import OSIntEnter
             import OSIntExit
             import OSTimeTick
             import OSTCBCur
             import OSTCBHighRdy

        section		.text

******************************************************************
*                        START MULTITASKING
*                    void OSStartHighRdy(void)
*
******************************************************************

OSStartHighRdy:
	    LDAB  #OSTCBHighRdy>>16
	    TBXK
	    LDX   OSTCBHighRdy
            MOVW  OSTCBHighRdy,OSTCBCur    * Point to TCB of highest priority task ready to run
                                           * OSTCBCur = OSTCBHighRdy
	    LDS   $0,X                    * SP = OSTCBHighRdy->OSTCBStkPtr
               
	    PULM  D,E,X,Y,Z,K    	   * Load task's context
            RTI			           * Run task

********************************************************************
*            PERFORM A CONTEXT SWITCH (From task level)
*                       void OSCtxSw(void)
*
********************************************************************
       
OSCtxSw:
            PSHM   D,E,X,Y,Z,K            * Save current task's context

	    LDAB  #OSTCBHighRdy>>16
	    TBXK
	    LDX    OSTCBHighRdy
	    LDAB  #OSTCBCur>>16
	    TBYK
	    LDY    OSTCBCur
	    STS    $0,Y                   * OSTCBCur->OSTCBStkPtr = SP
            MOVW   OSTCBHighRdy,OSTCBCur  * OSTCBCur = OSTCBHighRdy
	    LDS    $0,X                   * SP = OSTCBHighRdy->OSTCBStkPtr

	    PULM   D,E,X,Y,Z,K               * Load task's context
            RTI                              * Return to new task

************************************************************************
*                 PERFORM A CONTEXT SWITCH (From an ISR)
*                         void OSIntCtxSw(void)
************************************************************************

OSIntCtxSw:
	    AIS	   #$0C	    * Ignore calls to OSIntExit and OSIntCtxSw (8 bytes)
	                     * Call to OSIntExit does pshm z,k  (4 bytes)
	    LDAB  #OSTCBHighRdy>>16
	    TBXK
	    LDX    OSTCBHighRdy
	    LDAB  #OSTCBCur>>16
	    TBYK
	    LDY    OSTCBCur
	    STS    $0,Y                      * OSTCBCur->OSTCBStkPtr = SP
            MOVW   OSTCBHighRdy,OSTCBCur     * OSTCBCur = OSTCBHighRdy
	    LDS    $0,X                      * SP = OSTCBHighRdy->OSTCBStkPtr

	    PULM   D,E,X,Y,Z,K    	     * Load task's context
            RTI                              * Return to new task

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -