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

📄 os_cpu_a.lis

📁 mega16 ucos操作系统
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 007C 6A92                      ST      -Y,R6
 007E 7A92                      ST      -Y,R7
 0080 8A92                      ST      -Y,R8
 0082 9A92                      ST      -Y,R9
 0084 AA92                      ST      -Y,R10
 0086 BA92                      ST      -Y,R11
 0088 CA92                      ST      -Y,R12
 008A DA92                      ST      -Y,R13
 008C EA92                      ST      -Y,R14
 008E FA92                      ST      -Y,R15
 0090 0A93                      ST      -Y,R16
 0092 1A93                      ST      -Y,R17
 0094 2A93                      ST      -Y,R18
 0096 3A93                      ST      -Y,R19
 0098 4A93                      ST      -Y,R20
 009A 5A93                      ST      -Y,R21
 009C 6A93                      ST      -Y,R22
 009E 7A93                      ST      -Y,R23
 00A0 8A93                      ST      -Y,R24
 00A2 9A93                      ST      -Y,R25
 00A4 AA93                      ST      -Y,R26
 00A6 BA93                      ST      -Y,R27
 00A8 EA93                      ST      -Y,R30
 00AA FA93                      ST      -Y,R31               
 00AC 0FB7                      IN      R16,SREG
 00AE 0A93                      ST      -Y,R16
 00B0 0EB7                      IN      R16,SPH
 00B2 0A93                      ST      -Y,R16
 00B4 0DB7                      IN      R16,SPL
 00B6 0A93                      ST      -Y,R16
 00B8           
 00B8 E0910000                  LDS     R30,_OSTCBCur           ; Z = OSTCBCur->OSTCBStkPtr
 00BC F0910100                  LDS     R31,_OSTCBCur+1         ;
 00C0 C193                      ST      Z+,R28                          ; Save Y (R29:R28) pointer
 00C2 D193                      ST      Z+,R29                          ;
 00C4                      
 00C4 0E940000                  CALL    _OSTaskSwHook           ; Call user defined task switch hook
 00C8           
 00C8 00910000                  LDS     R16,_OSPrioHighRdy      ; OSPrioCur = OSPrioHighRdy
 00CC 00930000                  STS     _OSPrioCur,R16
 00D0                    
 00D0 E0910000                  LDS     R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
 00D4 F0910100                  LDS     R31,_OSTCBHighRdy+1     ; ready to run
 00D8 E0930000                  STS     _OSTCBCur,R30           ; OSTCBCur = OSTCBHighRdy
 00DC F0930100                  STS     _OSTCBCur+1,R31         ;
 00E0                  
 00E0 C191                      LD      R28,Z+          ; Restore Y pointer
 00E2 D191                      LD      R29,Z+          ;
 00E4                  
 00E4 0991                      LD      R16,Y+
 00E6 0DBF                      OUT     SPL,R16
 00E8 0991                      LD      R16,Y+
 00EA 0EBF                      OUT     SPH,R16
 00EC 0991                      LD      R16,Y+      ;restores status register
 00EE 07FD                      SBRC    R16,7       ;SKip next instruction in interrupt disabled
 00F0 20C0                      RJMP    OSCtxSw_1   
 00F2                           
 00F2 0FBF                      OUT   SREG,R16   ;Interrupts of task to return to are disabled
 00F4 F991                      LD      R31,Y+
 00F6 E991                      LD      R30,Y+
 00F8 B991                      LD      R27,Y+
 00FA A991                      LD      R26,Y+
 00FC 9991                      LD      R25,Y+
 00FE 8991                      LD      R24,Y+
 0100 7991                      LD      R23,Y+
 0102 6991                      LD      R22,Y+
 0104 5991                      LD      R21,Y+
 0106 4991                      LD      R20,Y+
 0108 3991                      LD      R19,Y+
 010A 2991                      LD      R18,Y+
 010C 1991                      LD      R17,Y+
 010E 0991                      LD      R16,Y+
 0110 F990                      LD      R15,Y+
 0112 E990                      LD      R14,Y+
 0114 D990                      LD      R13,Y+
 0116 C990                      LD      R12,Y+
 0118 B990                      LD      R11,Y+
 011A A990                      LD      R10,Y+
 011C 9990                      LD      R9,Y+
 011E 8990                      LD      R8,Y+
 0120 7990                      LD      R7,Y+
 0122 6990                      LD      R6,Y+
 0124 5990                      LD      R5,Y+
 0126 4990                      LD      R4,Y+
 0128 3990                      LD      R3,Y+
 012A 2990                      LD      R2,Y+
 012C 1990                      LD      R1,Y+
 012E 0990                      LD      R0,Y+
 0130 0895                      RET                 ;
 0132           OSCtxSw_1:
 0132 0F77              CBR    R16,BIT07   ;Interrupts of task to return to are enabled
 0134 0FBF                      OUT    SREG,R16
 0136 F991                      LD      R31,Y+
 0138 E991                      LD      R30,Y+
 013A B991                      LD      R27,Y+
 013C A991                      LD      R26,Y+
 013E 9991                      LD      R25,Y+
 0140 8991                      LD      R24,Y+
 0142 7991                      LD      R23,Y+
 0144 6991                      LD      R22,Y+
 0146 5991                      LD      R21,Y+
 0148 4991                      LD      R20,Y+
 014A 3991                      LD      R19,Y+
 014C 2991                      LD      R18,Y+
 014E 1991                      LD      R17,Y+
 0150 0991                      LD      R16,Y+
 0152 F990                      LD      R15,Y+
 0154 E990                      LD      R14,Y+
 0156 D990                      LD      R13,Y+
 0158 C990                      LD      R12,Y+
 015A B990                      LD      R11,Y+
 015C A990                      LD      R10,Y+
 015E 9990                      LD      R9,Y+
 0160 8990                      LD      R8,Y+
 0162 7990                      LD      R7,Y+
 0164 6990                      LD      R6,Y+
 0166 5990                      LD      R5,Y+
 0168 4990                      LD      R4,Y+
 016A 3990                      LD      R3,Y+
 016C 2990                      LD      R2,Y+
 016E 1990                      LD      R1,Y+
 0170 0990                      LD      R0,Y+
 0172 1895                      RETI              ;return form interrupt and enable interrupts
 0174           
 0174           
 0174           ;*******************************************************************************
 0174           ;               INTERRUPT LEVEL CONTEXT SWITCH
 0174           ;
 0174           ; Description : This function is called by OSIntExit() to perform a context
 0174           ; switch to a task that has been made ready-to-run by an ISR.
 0174           ;
 0174           ; Note(s):
 0174           ;       1) Upon entry,
 0174           ;               OSTCBCur     points to the OS_TCB of the task to suspend
 0174           ;               OSTCBHighRdy points to the OS_TCB of the task to resume
 0174           ;
 0174           ;       2) The stack frame of the task to suspend looks as follows:
 0174           ;
 0174           ;               SP      +0 --> LSB of return address of OSIntCtxSw()   (Low memory)
 0174           ;                       +1     MSB of return address of OSIntCtxSw()
 0174           ;                       +2     LSB of return address of OSIntExit()
 0174           ;                       +3     MSB of return address of OSIntExit()
 0174           ;                       +4     LSB of task code address
 0174           ;                       +5     MSB of task code address         (High memory)
 0174           ;
 0174           ;       3) The saved context of the task to resume looks as follows:
 0174           ;
 0174           ;               OSTCBHighRdy->OSTCBStkPtr -->   LSB of (return) stack pointer (Low mem)
 0174           ;                                                                               MSB of (return) stack pointer
 0174           ;                                                                               Flags to load in status register
 0174           ;                                                                               R31
 0174           ;                                                                               R30
 0174           ;                                                                               R7
 0174           ;                                                                               .
 0174           ;                                                                               .
 0174           ;                                                                               .
 0174           ;                                                                               R0              (High memory)
 0174           ;*******************************************************************************
 0174           
 0174           _OSIntCtxSw::
 0174           	;	IN      R30,SPL				; Z = SP
 0174           	;	IN      R31,SPH
 0174           	;	ADIW    R30,4	; (Uncomment if OS_CRITICAL_METHOD is 1, see OS_CPU.H)
 0174           	;	ADIW    R30,5				; Adjust Z to point to task return address
 0174           	;	ST      -Y,R31				; Save SP
 0174           	;	ST      -Y,R30				;
 0174           	
 0174           	;	LDS     R30,_OSTCBCur		; Z = OSTCBCur->OSTCBStkPtr
 0174           	;	LDS     R31,_OSTCBCur+1		;
 0174           	;	ST      Z+,R28				; Save Y pointer
 0174           	;	ST      Z+,R29				;
 0174           
 0174 0E940000                  CALL    _OSTaskSwHook           ; Call user defined task switch hook
 0178           
 0178 00910000                  LDS     R16,_OSPrioHighRdy      ; OSPrioCur = OSPrioHighRdy
 017C 00930000                  STS     _OSPrioCur,R16  ;
 0180           
 0180 E0910000                  LDS     R30,_OSTCBHighRdy       ; Z = OSTCBHighRdy->OSTCBStkPtr
 0184 F0910100                  LDS     R31,_OSTCBHighRdy+1     ;
 0188 E0930000                  STS     _OSTCBCur,R30           ; OSTCBCur = OSTCBHighRdy
 018C F0930100                  STS     _OSTCBCur+1,R31         ;
 0190           
 0190 C191                      LD      R28,Z+                          ; Restore Y pointer
 0192 D191                      LD      R29,Z+                          ;
 0194 0991                      LD      R16,Y+
 0196 0DBF                      OUT     SPL,R16
 0198 0991                      LD      R16,Y+
 019A 0EBF                      OUT     SPH,R16
 019C 0991                      LD      R16,Y+              ; restore stuatus register
 019E 07FD                      SBRC    R16,7
 01A0 20C0                      RJMP    OSIntCtxSw_1
 01A2                           
 01A2 0FBF                      OUT     SREG,R16                        ; restore SREG
 01A4 F991                      LD      R31,Y+
 01A6 E991                      LD      R30,Y+
 01A8 B991                      LD      R27,Y+
 01AA A991                      LD      R26,Y+
 01AC 9991                      LD      R25,Y+
 01AE 8991                      LD      R24,Y+
 01B0 7991                      LD      R23,Y+
 01B2 6991                      LD      R22,Y+
 01B4 5991                      LD      R21,Y+
 01B6 4991                      LD      R20,Y+
 01B8 3991                      LD      R19,Y+
 01BA 2991                      LD      R18,Y+
 01BC 1991                      LD      R17,Y+
 01BE 0991                      LD      R16,Y+
 01C0 F990                      LD      R15,Y+
 01C2 E990                      LD      R14,Y+
 01C4 D990                      LD      R13,Y+
 01C6 C990                      LD      R12,Y+
 01C8 B990                      LD      R11,Y+
 01CA A990                      LD      R10,Y+
 01CC 9990                      LD      R9,Y+
 01CE 8990                      LD      R8,Y+
 01D0 7990                      LD      R7,Y+
 01D2 6990                      LD      R6,Y+
 01D4 5990                      LD      R5,Y+
 01D6 4990                      LD      R4,Y+
 01D8 3990                      LD      R3,Y+
 01DA 2990                      LD      R2,Y+
 01DC 1990                      LD      R1,Y+
 01DE 0990                      LD      R0,Y+
 01E0 0895                      RET
 01E2           	OSIntCtxSw_1:
 01E2 0F77                  CBR     R16,BIT07;
 01E4 0FBF                      OUT     SREG,R16
 01E6 F991                      LD      R31,Y+
 01E8 E991                      LD      R30,Y+
 01EA B991                      LD      R27,Y+
 01EC A991                      LD      R26,Y+
 01EE 9991                      LD      R25,Y+
 01F0 8991                      LD      R24,Y+
 01F2 7991                      LD      R23,Y+
 01F4 6991                      LD      R22,Y+
 01F6 5991                      LD      R21,Y+
 01F8 4991                      LD      R20,Y+
 01FA 3991                      LD      R19,Y+
 01FC 2991                      LD      R18,Y+
 01FE 1991                      LD      R17,Y+
 0200 0991                      LD      R16,Y+
 0202 F990                      LD      R15,Y+
 0204 E990                      LD      R14,Y+
 0206 D990                      LD      R13,Y+
 0208 C990                      LD      R12,Y+
 020A B990                      LD      R11,Y+
 020C A990                      LD      R10,Y+
 020E 9990                      LD      R9,Y+
 0210 8990                      LD      R8,Y+
 0212 7990                      LD      R7,Y+
 0214 6990                      LD      R6,Y+
 0216 5990                      LD      R5,Y+
 0218 4990                      LD      R4,Y+
 021A 3990                      LD      R3,Y+
 021C 2990                      LD      R2,Y+
 021E 1990                      LD      R1,Y+
 0220 0990                      LD      R0,Y+
 0222 1895                      RETI

⌨️ 快捷键说明

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