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

📄 os_cpu_a.lis

📁 ucos-ii-at90S-icc-avr
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00CC F0930100                  STS     _OSTCBCur+1,R31         ;
 00D0           
 00D0 C191                      LD      R28,Z+          ; Restore Y pointer
 00D2 D191                      LD      R29,Z+          ;
 00D4           
 00D4 0991                      LD      R16,Y+
 00D6 0DBF                      OUT     SPL,R16
 00D8 0991                      LD      R16,Y+
 00DA 0EBF                      OUT     SPH,R16
 00DC 0991                      LD      R16,Y+
 00DE 0FBF                      OUT     SREG,R16
 00E0 F991                      LD      R31,Y+
 00E2 E991                      LD      R30,Y+
 00E4 B991                      LD      R27,Y+
 00E6 A991                      LD      R26,Y+
 00E8 9991                      LD      R25,Y+
 00EA 8991                      LD      R24,Y+
 00EC 7991                      LD      R23,Y+
 00EE 6991                      LD      R22,Y+
 00F0 5991                      LD      R21,Y+
 00F2 4991                      LD      R20,Y+
 00F4 3991                      LD      R19,Y+
 00F6 2991                      LD      R18,Y+
 00F8 1991                      LD      R17,Y+
 00FA 0991                      LD      R16,Y+
 00FC F990                      LD      R15,Y+
 00FE E990                      LD      R14,Y+
 0100 D990                      LD      R13,Y+
 0102 C990                      LD      R12,Y+
 0104 B990                      LD      R11,Y+
 0106 A990                      LD      R10,Y+
 0108 9990                      LD      R9,Y+
 010A 8990                      LD      R8,Y+
 010C 7990                      LD      R7,Y+
 010E 6990                      LD      R6,Y+
 0110 5990                      LD      R5,Y+
 0112 4990                      LD      R4,Y+
 0114 3990                      LD      R3,Y+
 0116 2990                      LD      R2,Y+
 0118 1990                      LD      R1,Y+
 011A 0990                      LD      R0,Y+
 011C 0895                      RET
 011E           
 011E           
 011E           ;*******************************************************************************
 011E           ;               INTERRUPT LEVEL CONTEXT SWITCH
 011E           ;
 011E           ; Description : This function is called by OSIntExit() to perform a context
 011E           ; switch to a task that has been made ready-to-run by an ISR.
 011E           ;
 011E           ; Note(s):
 011E           ;       1) Upon entry,
 011E           ;               OSTCBCur     points to the OS_TCB of the task to suspend
 011E           ;               OSTCBHighRdy points to the OS_TCB of the task to resume
 011E           ;
 011E           ;       2) The stack frame of the task to suspend looks as follows:
 011E           ;
 011E           ;               SP      +0 --> LSB of return address of OSIntCtxSw()   (Low memory)
 011E           ;                       +1     MSB of return address of OSIntCtxSw()
 011E           ;                       +2     LSB of return address of OSIntExit()
 011E           ;                       +3     MSB of return address of OSIntExit()
 011E           ;                       +4     LSB of task code address
 011E           ;                       +5     MSB of task code address         (High memory)
 011E           ;
 011E           ;       3) The saved context of the task to resume looks as follows:
 011E           ;
 011E           ;               OSTCBHighRdy->OSTCBStkPtr -->   LSB of (return) stack pointer (Low mem)
 011E           ;                                                                               MSB of (return) stack pointer
 011E           ;                                                                               Flags to load in status register
 011E           ;                                                                               R31
 011E           ;                                                                               R30
 011E           ;                                                                               R7
 011E           ;                                                                               .
 011E           ;                                                                               .
 011E           ;                                                                               .
 011E           ;                                                                               R0              (High memory)
 011E           ;*******************************************************************************
 011E           
 011E           _OSIntCtxSw::
 011E EDB7                      IN      R30,SPL                         ; Z = SP
 0120 FEB7                      IN      R31,SPH
 0122                   ;       ADIW    R30,4   ; (Uncomment if OS_CRITICAL_METHOD is 1, see OS_CPU.H)
 0122 3596                      ADIW    R30,5                           ; Adjust Z to point to task return address
 0124 FA93                      ST      -Y,R31                          ; Save SP
 0126 EA93                      ST      -Y,R30                          ;
 0128           
 0128 E0910000                  LDS     R30,_OSTCBCur                ; Z = OSTCBCur->OSTCBStkPtr
 012C F0910100                  LDS     R31,_OSTCBCur+1              ;
 0130 C193                      ST      Z+,R28                      ; Save Y pointer
 0132 D193                      ST      Z+,R29                      ;
 0134           
 0134 00D0                      RCALL   _OSTaskSwHook                ; RCALL user defined task switch hook
 0136           
 0136 00910000                  LDS     R16,_OSPrioHighRdy           ; OSPrioCur = OSPrioHighRdy
 013A 00930000                  STS     _OSPrioCur,R16               ;
 013E           
 013E E0910000                  LDS     R30,_OSTCBHighRdy            ; Z = OSTCBHighRdy->OSTCBStkPtr
 0142 F0910100                  LDS     R31,_OSTCBHighRdy+1          ;
 0146 E0930000                  STS     _OSTCBCur,R30                ; OSTCBCur = OSTCBHighRdy
 014A F0930100                  STS     _OSTCBCur+1,R31              ;
 014E           
 014E C191                      LD      R28,Z+                      ; Restore Y pointer
 0150 D191                      LD      R29,Z+                      ;
 0152           
 0152 0991                      LD      R16,Y+
 0154 0DBF                      OUT     SPL,R16
 0156 0991                      LD      R16,Y+
 0158 0EBF                      OUT     SPH,R16
 015A 0991                      LD      R16,Y+
 015C 0FBF                      OUT     SREG,R16
 015E F991                      LD      R31,Y+
 0160 E991                      LD      R30,Y+
 0162 B991                      LD      R27,Y+
 0164 A991                      LD      R26,Y+
 0166 9991                      LD      R25,Y+
 0168 8991                      LD      R24,Y+
 016A 7991                      LD      R23,Y+
 016C 6991                      LD      R22,Y+
 016E 5991                      LD      R21,Y+
 0170 4991                      LD      R20,Y+
 0172 3991                      LD      R19,Y+
 0174 2991                      LD      R18,Y+
 0176 1991                      LD      R17,Y+
 0178 0991                      LD      R16,Y+
 017A F990                      LD      R15,Y+
 017C E990                      LD      R14,Y+
 017E D990                      LD      R13,Y+
 0180 C990                      LD      R12,Y+
 0182 B990                      LD      R11,Y+
 0184 A990                      LD      R10,Y+
 0186 9990                      LD      R9,Y+
 0188 8990                      LD      R8,Y+
 018A 7990                      LD      R7,Y+
 018C 6990                      LD      R6,Y+
 018E 5990                      LD      R5,Y+
 0190 4990                      LD      R4,Y+
 0192 3990                      LD      R3,Y+
 0194 2990                      LD      R2,Y+
 0196 1990                      LD      R1,Y+
 0198 0990                      LD      R0,Y+
 019A 0895                      RET
 019C           
 019C           
 019C           ;old code
 019C           ;               IN      R30,SPL                         ; Z = SP
 019C           ;               IN      R31,SPH
 019C                   ;       ADIW    R30,4   ; (Uncomment if OS_CRITICAL_METHOD is 1, see OS_CPU.H)
 019C           ;               ADIW    R30,5                           ; Adjust Z to point to task return address
 019C           ;               ST      -Y,R31                          ; Save SP
 019C           ;               ST      -Y,R30                          ;
 019C           ;       
 019C           ;               LDS     R30,_OSTCBCur           ; Z = OSTCBCur->OSTCBStkPtr
 019C           ;               LDS     R31,_OSTCBCur+1         ;
 019C           ;               ST      Z+,R28                          ; Save Y pointer
 019C           ;               ST      Z+,R29                          ;
 019C           ;
 019C           ;               RCALL    _OSTaskSwHook          ; RCALL user defined task switch hook
 019C           ;
 019C           ;               LDS     R16,_OSPrioHighRdy      ; OSPrioCur = OSPrioHighRdy
 019C           ;               STS     _OSPrioCur,R16  ;
 019C           ;
 019C           ;               LDS     R30,_OSTCBHighRdy       ; Z = OSTCBHighRdy->OSTCBStkPtr
 019C           ;               LDS     R31,_OSTCBHighRdy+1     ;
 019C           ;               STS     _OSTCBCur,R30           ; OSTCBCur = OSTCBHighRdy
 019C           ;               STS     _OSTCBCur+1,R31         ;
 019C           ;
 019C           ;               LD      R28,Z+                          ; Restore Y pointer
 019C           ;               LD      R29,Z+                          ;
 019C           ;               POPSP                                           ; restore stack pointer
 019C           ;               POPSREG                                         ; restore SREG
 019C           ;               POPRS                                           ; restore registers
 019C           ;               RET
 019C           ;
 019C           ;******************************************************************************
 019C           ;                          SYSTEM TICK ISR
 019C           ;
 019C           ; Description: This function is the ISR used to notify uC/OS-II that a system
 019C           ; tick has occurred.
 019C           ;
 019C           ;
 019C           ;*******************************************************************************
 019C           ; 
 019C           _Before_OSTickIS::
 019C 0000                                        nop
 019E 0895                                        ret
 01A0           _OSTickISR::    
 01A0 0A92                      ST      -Y,R0   
 01A2 1A92                      ST      -Y,R1
 01A4 2A92                      ST      -Y,R2
 01A6 3A92                      ST      -Y,R3
 01A8 4A92                      ST      -Y,R4
 01AA 5A92                      ST      -Y,R5
 01AC 6A92                      ST      -Y,R6
 01AE 7A92                      ST      -Y,R7
 01B0 8A92                      ST      -Y,R8
 01B2 9A92                      ST      -Y,R9
 01B4 AA92                      ST      -Y,R10
 01B6 BA92                      ST      -Y,R11
 01B8 CA92                      ST      -Y,R12
 01BA DA92                      ST      -Y,R13
 01BC EA92                      ST      -Y,R14
 01BE FA92                      ST      -Y,R15
 01C0 0A93                      ST      -Y,R16
 01C2 1A93                      ST      -Y,R17
 01C4 2A93                      ST      -Y,R18
 01C6 3A93                      ST      -Y,R19
 01C8 4A93                      ST      -Y,R20
 01CA 5A93                      ST      -Y,R21
 01CC 6A93                      ST      -Y,R22
 01CE 7A93                      ST      -Y,R23
 01D0 8A93                      ST      -Y,R24
 01D2 9A93                      ST      -Y,R25
 01D4 AA93                      ST      -Y,R26
 01D6 BA93                      ST      -Y,R27
 01D8 EA93                      ST      -Y,R30
 01DA FA93                      ST      -Y,R31
 01DC 0FB7                      IN      R16,SREG
 01DE 0068                      SBR     R16,0x80                    ; Set interrupt bit in status reg and save
 01E0 0A93                      ST      -Y,R16
 01E2           ;can not do this,or uc-os-ii will die
 01E2           ;                PUSHSP
 01E2           ;avr-gcc ->11059200
 01E2 04E6                      LDI     R16,256-(8000000/50/1024)   ; Reload timer to overflow at a rate of 50Hz
 01E4 02BF                      OUT     TCNT0,R16                   ; at a prescaler of 1024 and 7.3728 MHz AVR clock
 01E6           
 01E6 00910000                  LDS     R16,_OSIntNesting            ; Notify uC/OS-II of ISR
 01EA 0395                      INC     R16                         ;
 01EC 00930000                  STS     _OSIntNesting,R16            ;
 01F0                   
 01F0 7894                      SEI                                 ; Enable interrupts
 01F2 00D0                      RCALL   _OSTimeTick                  ; RCALL uC/OS-II's tick updating function
 01F4 00D0                      RCALL   _OSIntExit                   ; Notify uC/OS-II about end of ISR
 01F6                           
 01F6           ;                POPSP
 01F6 0991                      LD      R16,Y+
 01F8 0FBF                      OUT     SREG,R16
 01FA F991                      LD      R31,Y+
 01FC E991                      LD      R30,Y+
 01FE B991                      LD      R27,Y+
 0200 A991                      LD      R26,Y+
 0202 9991                      LD      R25,Y+
 0204 8991                      LD      R24,Y+
 0206 7991                      LD      R23,Y+
 0208 6991                      LD      R22,Y+
 020A 5991                      LD      R21,Y+
 020C 4991                      LD      R20,Y+
 020E 3991                      LD      R19,Y+
 0210 2991                      LD      R18,Y+
 0212 1991                      LD      R17,Y+
 0214 0991                      LD      R16,Y+
 0216 F990                      LD      R15,Y+
 0218 E990                      LD      R14,Y+
 021A D990                      LD      R13,Y+
 021C C990                      LD      R12,Y+
 021E B990                      LD      R11,Y+
 0220 A990                      LD      R10,Y+
 0222 9990                      LD      R9,Y+
 0224 8990                      LD      R8,Y+
 0226 7990                      LD      R7,Y+
 0228 6990                      LD      R6,Y+
 022A 5990                      LD      R5,Y+
 022C 4990                      LD      R4,Y+
 022E 3990                      LD      R3,Y+
 0230 2990                      LD      R2,Y+
 0232 1990                      LD      R1,Y+
 0234 0990                      LD      R0,Y+
 0236 0895                      RET                     ; Note: RET instead of RETI
 0238           
 0238           ;*******************************************************************************
 0238           ;
 0238           ;*******************************************************************************
 0238           

⌨️ 快捷键说明

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