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

📄 os_cpu_a.lis

📁 ucos如何移植到单片机mega128
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00AA 0A93                      ST      -Y,R16
 00AC 0EB7                      IN      R16,SPH
 00AE 0A93                      ST      -Y,R16
 00B0 0DB7                      IN      R16,SPL
 00B2 0A93                      ST      -Y,R16
 00B4           
 00B4 E0910000                  LDS     R30,_OSTCBCur           ; Z = OSTCBCur->OSTCBStkPtr
 00B8 F0910100                  LDS     R31,_OSTCBCur+1         ;
 00BC C193                      ST      Z+,R28                          ; Save Y (R29:R28) pointer
 00BE D193                      ST      Z+,R29                          ;
 00C0                   
 00C0 0E940000                  CALL    _OSTaskSwHook           ; Call user defined task switch hook
 00C4           
 00C4 00910000                  LDS     R16,_OSPrioHighRdy      ; OSPrioCur = OSPrioHighRdy
 00C8 00930000                  STS     _OSPrioCur,R16
 00CC                   
 00CC E0910000                  LDS     R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
 00D0 F0910100                  LDS     R31,_OSTCBHighRdy+1     ; ready to run
 00D4 E0930000                  STS     _OSTCBCur,R30           ; OSTCBCur = OSTCBHighRdy
 00D8 F0930100                  STS     _OSTCBCur+1,R31         ;
 00DC           
 00DC C191                      LD      R28,Z+          ; Restore Y pointer
 00DE D191                      LD      R29,Z+          ;
 00E0           
 00E0 0991                      LD      R16,Y+
 00E2 0DBF                      OUT     SPL,R16
 00E4 0991                      LD      R16,Y+
 00E6 0EBF                      OUT     SPH,R16
 00E8 0991                      LD      R16,Y+
 00EA 0FBF                      OUT     SREG,R16
 00EC 0991                      LD      R16,Y+
 00EE 0BBF                      OUT     RAMPZ,R16
 00F0 F991                      LD      R31,Y+
 00F2 E991                      LD      R30,Y+
 00F4 B991                      LD      R27,Y+
 00F6 A991                      LD      R26,Y+
 00F8 9991                      LD      R25,Y+
 00FA 8991                      LD      R24,Y+
 00FC 7991                      LD      R23,Y+
 00FE 6991                      LD      R22,Y+
 0100 5991                      LD      R21,Y+
 0102 4991                      LD      R20,Y+
 0104 3991                      LD      R19,Y+
 0106 2991                      LD      R18,Y+
 0108 1991                      LD      R17,Y+
 010A 0991                      LD      R16,Y+
 010C F990                      LD      R15,Y+
 010E E990                      LD      R14,Y+
 0110 D990                      LD      R13,Y+
 0112 C990                      LD      R12,Y+
 0114 B990                      LD      R11,Y+
 0116 A990                      LD      R10,Y+
 0118 9990                      LD      R9,Y+
 011A 8990                      LD      R8,Y+
 011C 7990                      LD      R7,Y+
 011E 6990                      LD      R6,Y+
 0120 5990                      LD      R5,Y+
 0122 4990                      LD      R4,Y+
 0124 3990                      LD      R3,Y+
 0126 2990                      LD      R2,Y+
 0128 1990                      LD      R1,Y+
 012A 0990                      LD      R0,Y+
 012C 0895                      RET
 012E           
 012E           
 012E           ;*******************************************************************************
 012E           ;               INTERRUPT LEVEL CONTEXT SWITCH
 012E           ;
 012E           ; Description : This function is called by OSIntExit() to perform a context
 012E           ; switch to a task that has been made ready-to-run by an ISR.
 012E           ;
 012E           ; Note(s):
 012E           ;       1) Upon entry,
 012E           ;               OSTCBCur     points to the OS_TCB of the task to suspend
 012E           ;               OSTCBHighRdy points to the OS_TCB of the task to resume
 012E           ;
 012E           ;       2) The stack frame of the task to suspend looks as follows:
 012E           ;
 012E           ;               SP      +0 --> LSB of return address of OSIntCtxSw()   (Low memory)
 012E           ;                       +1     MSB of return address of OSIntCtxSw()
 012E           ;                       +2     LSB of return address of OSIntExit()
 012E           ;                       +3     MSB of return address of OSIntExit()
 012E           ;                       +4     LSB of task code address
 012E           ;                       +5     MSB of task code address         (High memory)
 012E           ;
 012E           ;       3) The saved context of the task to resume looks as follows:
 012E           ;
 012E           ;               OSTCBHighRdy->OSTCBStkPtr -->   LSB of (return) stack pointer (Low mem)
 012E           ;                                                                               MSB of (return) stack pointer
 012E           ;                                                                               Flags to load in status register
 012E           ;                                                                               R31
 012E           ;                                                                               R30
 012E           ;                                                                               R7
 012E           ;                                                                               .
 012E           ;                                                                               .
 012E           ;                                                                               .
 012E           ;                                                                               R0              (High memory)
 012E           ;*******************************************************************************
 012E           
 012E           _OSIntCtxSw::
 012E EDB7                      IN      R30,SPL                         ; Z = SP
 0130 FEB7                      IN      R31,SPH
 0132                   ;       ADIW    R30,4   ; (Uncomment if OS_CRITICAL_METHOD is 1, see OS_CPU.H)
 0132 3596                      ADIW    R30,5                           ; Adjust Z to point to task return address
 0134 FA93                      ST      -Y,R31                          ; Save SP
 0136 EA93                      ST      -Y,R30                          ;
 0138                   
 0138 E0910000                  LDS     R30,_OSTCBCur           ; Z = OSTCBCur->OSTCBStkPtr
 013C F0910100                  LDS     R31,_OSTCBCur+1         ;
 0140 C193                      ST      Z+,R28                          ; Save Y pointer
 0142 D193                      ST      Z+,R29                          ;
 0144           
 0144 0E940000                  CALL    _OSTaskSwHook           ; Call user defined task switch hook
 0148           
 0148 00910000                  LDS     R16,_OSPrioHighRdy      ; OSPrioCur = OSPrioHighRdy
 014C 00930000                  STS     _OSPrioCur,R16  ;
 0150           
 0150 E0910000                  LDS     R30,_OSTCBHighRdy       ; Z = OSTCBHighRdy->OSTCBStkPtr
 0154 F0910100                  LDS     R31,_OSTCBHighRdy+1     ;
 0158 E0930000                  STS     _OSTCBCur,R30           ; OSTCBCur = OSTCBHighRdy
 015C F0930100                  STS     _OSTCBCur+1,R31         ;
 0160           
 0160 C191                      LD      R28,Z+                          ; Restore Y pointer
 0162 D191                      LD      R29,Z+                          ;
 0164 0991                      LD      R16,Y+
 0166 0DBF                      OUT     SPL,R16
 0168 0991                      LD      R16,Y+
 016A 0EBF                      OUT     SPH,R16
 016C 0991                      LD      R16,Y+
 016E 0FBF                      OUT     SREG,R16
 0170 0991                      LD      R16,Y+
 0172 0BBF                      OUT     RAMPZ,R16
 0174 F991                      LD      R31,Y+
 0176 E991                      LD      R30,Y+
 0178 B991                      LD      R27,Y+
 017A A991                      LD      R26,Y+
 017C 9991                      LD      R25,Y+
 017E 8991                      LD      R24,Y+
 0180 7991                      LD      R23,Y+
 0182 6991                      LD      R22,Y+
 0184 5991                      LD      R21,Y+
 0186 4991                      LD      R20,Y+
 0188 3991                      LD      R19,Y+
 018A 2991                      LD      R18,Y+
 018C 1991                      LD      R17,Y+
 018E 0991                      LD      R16,Y+
 0190 F990                      LD      R15,Y+
 0192 E990                      LD      R14,Y+
 0194 D990                      LD      R13,Y+
 0196 C990                      LD      R12,Y+
 0198 B990                      LD      R11,Y+
 019A A990                      LD      R10,Y+
 019C 9990                      LD      R9,Y+
 019E 8990                      LD      R8,Y+
 01A0 7990                      LD      R7,Y+
 01A2 6990                      LD      R6,Y+
 01A4 5990                      LD      R5,Y+
 01A6 4990                      LD      R4,Y+
 01A8 3990                      LD      R3,Y+
 01AA 2990                      LD      R2,Y+
 01AC 1990                      LD      R1,Y+
 01AE 0990                      LD      R0,Y+
 01B0 0895                      RET
 01B2           
 01B2           ;******************************************************************************
 01B2           ;                          SYSTEM TICK ISR
 01B2           ;
 01B2           ; Description: This function is the ISR used to notify uC/OS-II that a system
 01B2           ; tick has occurred.
 01B2           ;
 01B2           ;
 01B2           ;*******************************************************************************
 01B2           ; 
 01B2           _OSTickISR:: 
 01B2 0A92                      ST      -Y,R0   
 01B4 1A92                      ST      -Y,R1
 01B6 2A92                      ST      -Y,R2
 01B8 3A92                      ST      -Y,R3
 01BA 4A92                      ST      -Y,R4
 01BC 5A92                      ST      -Y,R5
 01BE 6A92                      ST      -Y,R6
 01C0 7A92                      ST      -Y,R7
 01C2 8A92                      ST      -Y,R8
 01C4 9A92                      ST      -Y,R9
 01C6 AA92                      ST      -Y,R10
 01C8 BA92                      ST      -Y,R11
 01CA CA92                      ST      -Y,R12
 01CC DA92                      ST      -Y,R13
 01CE EA92                      ST      -Y,R14
 01D0 FA92                      ST      -Y,R15
 01D2 0A93                      ST      -Y,R16
 01D4 1A93                      ST      -Y,R17
 01D6 2A93                      ST      -Y,R18
 01D8 3A93                      ST      -Y,R19
 01DA 4A93                      ST      -Y,R20
 01DC 5A93                      ST      -Y,R21
 01DE 6A93                      ST      -Y,R22
 01E0 7A93                      ST      -Y,R23
 01E2 8A93                      ST      -Y,R24
 01E4 9A93                      ST      -Y,R25
 01E6 AA93                      ST      -Y,R26
 01E8 BA93                      ST      -Y,R27
 01EA EA93                      ST      -Y,R30
 01EC FA93                      ST      -Y,R31
 01EE 0BB7                      IN      R16,RAMPZ
 01F0 0A93                      ST      -Y,R16
 01F2 0FB7                      IN      R16, SREG
 01F4 0068                      SBR     R16, 0x80               ; bei Aufruf dieser ISR geloeschtes I-Flag setzen 
 01F6 0A93                      ST      -Y, R16
 01F8           
 01F8                           ; TimerCounter aufrischen
 01F8 09ED                      LDI     R16,256-(4000000/100/1024)      ; Reload TC_2, 10ms bei 4MHz
 01FA 04BD                      OUT     TCNT2,R16
 01FC           
 01FC 00910000                  LDS     R16,_OSIntNesting           ; Notify uC/OS-II of ISR
 0200 0395                      INC     R16                         ;
 0202 00930000                  STS     _OSIntNesting,R16           ;
 0206           
 0206 0E940000                  CALL    _OSTimeTick             ; Call uC/OS-II's tick updating function
 020A                           ; bearbeitet die tasktimer, wenn 0 --> deren Prio in Aufruftab stellen
 020A           
 020A 0E940000                  CALL    _OSIntExit              ; Notify uC/OS-II about end of ISR
 020E                           ; fuehrt gegebenfalls einen Context-Switch aus
 020E           
 020E 0991                      LD      R16,Y+
 0210 0FBF                      OUT     SREG,R16
 0212 0991                      LD      R16,Y+
 0214 0BBF                      OUT     RAMPZ,R16
 0216 F991                      LD      R31,Y+
 0218 E991                      LD      R30,Y+
 021A B991                      LD      R27,Y+
 021C A991                      LD      R26,Y+
 021E 9991                      LD      R25,Y+
 0220 8991                      LD      R24,Y+
 0222 7991                      LD      R23,Y+
 0224 6991                      LD      R22,Y+
 0226 5991                      LD      R21,Y+
 0228 4991                      LD      R20,Y+
 022A 3991                      LD      R19,Y+
 022C 2991                      LD      R18,Y+
 022E 1991                      LD      R17,Y+
 0230 0991                      LD      R16,Y+
 0232 F990                      LD      R15,Y+
 0234 E990                      LD      R14,Y+
 0236 D990                      LD      R13,Y+
 0238 C990                      LD      R12,Y+
 023A B990                      LD      R11,Y+
 023C A990                      LD      R10,Y+
 023E 9990                      LD      R9,Y+
 0240 8990                      LD      R8,Y+
 0242 7990                      LD      R7,Y+
 0244 6990                      LD      R6,Y+
 0246 5990                      LD      R5,Y+
 0248 4990                      LD      R4,Y+
 024A 3990                      LD      R3,Y+
 024C 2990                      LD      R2,Y+
 024E 1990                      LD      R1,Y+
 0250 0990                      LD      R0,Y+
 0252 0895                      RET                     ; Note: RET instead of RETI
 0254           
 0254           ;*******************************************************************************
 0254           ;
 0254           ;*******************************************************************************
 0254           

⌨️ 快捷键说明

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