?? os_cpu_a.lis
字號:
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -