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

📄 osal_timers.s51

📁 cc2430应用实例
💻 S51
📖 第 1 页 / 共 5 页
字号:
        SJMP	??osalAddTimer_3
//  132 
//  133     return ( newTimer );
//  134   }
//  135   else
//  136   {
//  137     // New Timer
//  138     newTimer = osal_mem_alloc( sizeof( osalTimerRec_t ) );
??osalAddTimer_1:
        ; Setup parameters for call to function osal_mem_alloc
        MOV	R2,#0x7
        MOV	R3,#0x0
        MOV	DPTR,#(osal_mem_alloc & 0xffff)
        MOV	A,#((osal_mem_alloc >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  139 
//  140     if ( newTimer )
        MOV	A,R2
        JNZ	??osalAddTimer_4
        MOV	A,R3
??osalAddTimer_4:
        JZ	??osalAddTimer_5
//  141     {
//  142       // Fill in new timer
//  143       newTimer->task_id = task_id;
        MOV	DPL,R2
        MOV	DPH,R3
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOV	A,?V0 + 2
        MOVX	@DPTR,A
//  144       newTimer->event_flag = event_flag;
        MOV	DPL,R2
        MOV	DPH,R3
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOV	A,?V0 + 0
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,?V0 + 1
        MOVX	@DPTR,A
//  145       newTimer->timeout = timeout;
        MOV	DPL,R2
        MOV	DPH,R3
        INC	DPTR
        INC	DPTR
        MOV	A,R6
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R7
        MOVX	@DPTR,A
//  146       newTimer->next = (void *)NULL;
        MOV	DPL,R2
        MOV	DPH,R3
        CLR	A
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	@DPTR,A
//  147 
//  148       // Does the timer list already exist
//  149       if ( timerHead == NULL )
        MOV	DPTR,#timerHead
        MOVX	A,@DPTR
        JNZ	??osalAddTimer_6
        INC	DPTR
        MOVX	A,@DPTR
??osalAddTimer_6:
        MOV	DPTR,#timerHead
??osalAddTimer_7:
        JNZ	??osalAddTimer_8
//  150       {
//  151         // Start task list
//  152         timerHead = newTimer;
        MOV	A,R2
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R3
        SJMP	??osalAddTimer_2
//  153       }
//  154       else
//  155       {
//  156         // Add it to the end of the timer list
//  157         srchTimer = timerHead;
//  158 
//  159         // Stop at the last record
//  160         while ( srchTimer->next )
//  161           srchTimer = srchTimer->next;
??osalAddTimer_8:
        LCALL	?Subroutine2 & 0xFFFF
??CrossCallReturnLabel_6:
        MOV	DPL,R0
        MOV	DPH,R1
        MOVX	A,@DPTR
        JNZ	??osalAddTimer_9
        INC	DPTR
        MOVX	A,@DPTR
??osalAddTimer_9:
        MOV	DPL,R0
        MOV	DPH,R1
        SJMP	??osalAddTimer_7
//  162 
//  163         // Add to the list
//  164         srchTimer->next = newTimer;
//  165       }
//  166 
//  167       return ( newTimer );
//  168     }
//  169     else
//  170       return ( (osalTimerRec_t *)NULL );
??osalAddTimer_5:
        MOV	R2,#0x0
        MOV	R3,#0x0
??osalAddTimer_3:
        MOV	R7,#0x6
        LJMP	?BANKED_LEAVE_XDATA
        CFI EndBlock cfiBlock1
//  171   }
//  172 }
//  173 
//  174 /*********************************************************************
//  175  * @fn      osalFindTimer
//  176  *
//  177  * @brief   Find a timer in a timer list.
//  178  *          Ints must be disabled.
//  179  *
//  180  * @param   task_id
//  181  * @param   event_flag
//  182  *
//  183  * @return  osalTimerRec_t *
//  184  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  185 osalTimerRec_t *osalFindTimer( byte task_id, uint16 event_flag )
osalFindTimer:
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function osalFindTimer
//  186 {
        MOV	A,#-0x9
        LCALL	?BANKED_ENTER_XDATA
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 9)
        ; Saved register size: 9
        ; Auto size: 0
//  187   osalTimerRec_t *srchTimer;
//  188 
//  189   // Head of the timer list
//  190   srchTimer = timerHead;
        MOV	DPTR,#timerHead
        SJMP	??osalFindTimer_0
//  191 
//  192   // Stop when found or at the end
//  193   while ( srchTimer )
//  194   {
//  195     if ( srchTimer->event_flag == event_flag &&
//  196          srchTimer->task_id == task_id )
//  197       break;
//  198 
//  199     // Not this one, check another
//  200     srchTimer = srchTimer->next;
??osalFindTimer_1:
        MOV	DPL,R4
        MOV	DPH,R5
??osalFindTimer_0:
        LCALL	??Subroutine0_0 & 0xFFFF
??CrossCallReturnLabel_0:
        MOV	A,R4
        JNZ	??osalFindTimer_2
        MOV	A,R5
??osalFindTimer_2:
        JZ	??osalFindTimer_3
        MOV	DPL,R4
        MOV	DPH,R5
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	A,@DPTR
        XRL	A,R2
        JNZ	??osalFindTimer_4
        INC	DPTR
        MOVX	A,@DPTR
        XRL	A,R3
??osalFindTimer_4:
        JNZ	??osalFindTimer_1
        MOV	DPL,R4
        MOV	DPH,R5
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	A,@DPTR
        XRL	A,R1
        JNZ	??osalFindTimer_1
//  201   }
//  202 
//  203   return ( srchTimer );
??osalFindTimer_3:
        MOV	A,R4
        MOV	R2,A
        MOV	A,R5
        MOV	R3,A
        SJMP	??Subroutine4_0
        CFI EndBlock cfiBlock2
//  204 }

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine4:
        CFI Block cfiBlock3 Using cfiCommon0
        CFI NoFunction
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 9)
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        LCALL	?BCALL               ; Banked call to: DPTR()
??Subroutine4_0:
        MOV	R7,#0x1
        LJMP	?BANKED_LEAVE_XDATA
        CFI EndBlock cfiBlock3
//  205 
//  206 /*********************************************************************
//  207  * @fn      osalDeleteTimer
//  208  *
//  209  * @brief   Delete a timer from a timer list.
//  210  *          Ints must be disabled.
//  211  *
//  212  * @param   table
//  213  * @param   rmTimer
//  214  *
//  215  * @return  none
//  216  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  217 void osalDeleteTimer( osalTimerRec_t *rmTimer )
osalDeleteTimer:
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function osalDeleteTimer
//  218 {
        FUNCALL osalDeleteTimer, osal_mem_free
        LOCFRAME XSTACK, 9, STACK
        ARGFRAME XSTACK, 9, STACK
        FUNCALL osalDeleteTimer, osal_mem_free
        LOCFRAME XSTACK, 9, STACK
        ARGFRAME XSTACK, 9, STACK
        MOV	A,#-0x9
        LCALL	?BANKED_ENTER_XDATA
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 9)
        ; Saved register size: 9
        ; Auto size: 0
//  219   osalTimerRec_t *srchTimer;
//  220 
//  221   // Does the timer list really exist
//  222   if ( (timerHead != NULL) && rmTimer )
        MOV	DPTR,#timerHead
        MOVX	A,@DPTR
        JNZ	??osalDeleteTimer_0
        INC	DPTR
        MOVX	A,@DPTR
??osalDeleteTimer_0:
        JZ	??osalDeleteTimer_1
        MOV	A,R2
        JNZ	??osalDeleteTimer_2
        MOV	A,R3
??osalDeleteTimer_2:
        JZ	??osalDeleteTimer_1
//  223   {
//  224     // Add it to the end of the timer list
//  225     srchTimer = timerHead;
        MOV	DPTR,#timerHead
        LCALL	?Subroutine2 & 0xFFFF
//  226 
//  227     // First element?
//  228     if ( srchTimer == rmTimer )
??CrossCallReturnLabel_7:
        MOV	A,R2
        XRL	A,R0
        JNZ	??osalDeleteTimer_3
        MOV	A,R3
        XRL	A,R1
??osalDeleteTimer_3:
        JNZ	??CrossCallReturnLabel_8
//  229     {
//  230       timerHead = rmTimer->next;
        MOV	DPL,R2
        MOV	DPH,R3
        LCALL	?Subroutine1 & 0xFFFF
??CrossCallReturnLabel_4:
        MOV	A,R0
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R1
        SJMP	??osalDeleteTimer_4
//  231       osal_mem_free( rmTimer );
//  232     }
//  233     else
//  234     {

⌨️ 快捷键说明

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