?? os_cpu_a.lis
字號(hào):
0094 AA93 ST -Y,R26
0096 BA93 ST -Y,R27
0098 EA93 ST -Y,R30
009A FA93 ST -Y,R31
009C 0FB7 IN R16,SREG
009E 0A93 ST -Y,R16
00A0 0EB7 IN R16,SPH
00A2 0A93 ST -Y,R16
00A4 0DB7 IN R16,SPL
00A6 0A93 ST -Y,R16
00A8
00A8 E0910000 LDS R30,_OSTCBCur ; Z = OSTCBCur->OSTCBStkPtr
00AC F0910100 LDS R31,_OSTCBCur+1 ;
00B0 C193 ST Z+,R28 ; Save Y (R29:R28) pointer
00B2 D193 ST Z+,R29 ;
00B4
00B4 00910000 LDS R16,_OSPrioHighRdy ; OSPrioCur = OSPrioHighRdy
00B8 00930000 STS _OSPrioCur,R16
00BC
00BC E0910000 LDS R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
00C0 F0910100 LDS R31,_OSTCBHighRdy+1 ; ready to run
00C4 E0930000 STS _OSTCBCur,R30 ; OSTCBCur = OSTCBHighRdy
00C8 F0930100 STS _OSTCBCur+1,R31 ;
00CC
00CC C191 LD R28,Z+ ; Restore Y pointer
00CE D191 LD R29,Z+ ;
00D0
00D0 0991 LD R16,Y+
00D2 0DBF OUT SPL,R16
00D4 0991 LD R16,Y+
00D6 0EBF OUT SPH,R16
00D8 0991 LD R16,Y+
00DA 0FBF OUT SREG,R16
00DC F991 LD R31,Y+
00DE E991 LD R30,Y+
00E0 B991 LD R27,Y+
00E2 A991 LD R26,Y+
00E4 9991 LD R25,Y+
00E6 8991 LD R24,Y+
00E8 7991 LD R23,Y+
00EA 6991 LD R22,Y+
00EC 5991 LD R21,Y+
00EE 4991 LD R20,Y+
00F0 3991 LD R19,Y+
00F2 2991 LD R18,Y+
00F4 1991 LD R17,Y+
00F6 0991 LD R16,Y+
00F8 F990 LD R15,Y+
00FA E990 LD R14,Y+
00FC D990 LD R13,Y+
00FE C990 LD R12,Y+
0100 B990 LD R11,Y+
0102 A990 LD R10,Y+
0104 9990 LD R9,Y+
0106 8990 LD R8,Y+
0108 7990 LD R7,Y+
010A 6990 LD R6,Y+
010C 5990 LD R5,Y+
010E 4990 LD R4,Y+
0110 3990 LD R3,Y+
0112 2990 LD R2,Y+
0114 1990 LD R1,Y+
0116 0990 LD R0,Y+
0118 0895 RET
011A
011A _OSTickISR::
011A 0A92 ST -Y,R0
011C 1A92 ST -Y,R1
011E 2A92 ST -Y,R2
0120 3A92 ST -Y,R3
0122 4A92 ST -Y,R4
0124 5A92 ST -Y,R5
0126 6A92 ST -Y,R6
0128 7A92 ST -Y,R7
012A 8A92 ST -Y,R8
012C 9A92 ST -Y,R9
012E AA92 ST -Y,R10
0130 BA92 ST -Y,R11
0132 CA92 ST -Y,R12
0134 DA92 ST -Y,R13
0136 EA92 ST -Y,R14
0138 FA92 ST -Y,R15
013A 0A93 ST -Y,R16
013C 1A93 ST -Y,R17
013E 2A93 ST -Y,R18
0140 3A93 ST -Y,R19
0142 4A93 ST -Y,R20
0144 5A93 ST -Y,R21
0146 6A93 ST -Y,R22
0148 7A93 ST -Y,R23
014A 8A93 ST -Y,R24
014C 9A93 ST -Y,R25
014E AA93 ST -Y,R26
0150 BA93 ST -Y,R27
0152 EA93 ST -Y,R30
0154 FA93 ST -Y,R31
0156
0156 0FB7 IN R16,SREG
0158 0068 SBR R16,0x80 ; Set interrupt bit in status reg and save
015A 0A93 ST -Y,R16
015C ; PUSHSP
015C
015C ;avr-gcc ->11059200
015C 04E6 LDI R16,256-(8000000/50/1024) ; Reload timer to overflow at a rate of 50Hz
015E 02BF OUT TCNT0,R16 ; at a prescaler of 1024 and 7.3728 MHz AVR clock
0160
0160 00910000 LDS R16,_OSIntNesting ; Notify uC/OS-II of ISR
0164 0395 INC R16 ;
0166 00930000 STS _OSIntNesting,R16 ;
016A
016A ;why?
016A ; SEI ; Enable interrupts
016A 00D0 RCALL _OSTimeTick ; RCALL uC/OS-II's tick updating function
016C 00D0 RCALL _OSIntExit ; Notify uC/OS-II about end of ISR
016E
016E ; POPSP
016E 0991 LD R16,Y+
0170 0FBF OUT SREG,R16
0172 F991 LD R31,Y+
0174 E991 LD R30,Y+
0176 B991 LD R27,Y+
0178 A991 LD R26,Y+
017A 9991 LD R25,Y+
017C 8991 LD R24,Y+
017E 7991 LD R23,Y+
0180 6991 LD R22,Y+
0182 5991 LD R21,Y+
0184 4991 LD R20,Y+
0186 3991 LD R19,Y+
0188 2991 LD R18,Y+
018A 1991 LD R17,Y+
018C 0991 LD R16,Y+
018E F990 LD R15,Y+
0190 E990 LD R14,Y+
0192 D990 LD R13,Y+
0194 C990 LD R12,Y+
0196 B990 LD R11,Y+
0198 A990 LD R10,Y+
019A 9990 LD R9,Y+
019C 8990 LD R8,Y+
019E 7990 LD R7,Y+
01A0 6990 LD R6,Y+
01A2 5990 LD R5,Y+
01A4 4990 LD R4,Y+
01A6 3990 LD R3,Y+
01A8 2990 LD R2,Y+
01AA 1990 LD R1,Y+
01AC 0990 LD R0,Y+
01AE ; SEI
01AE 0895 RET ; Note: RET instead of RETI
01B0
01B0 ;*******************************************************************************
01B0 ; INTERRUPT LEVEL CONTEXT SWITCH
01B0 ;
01B0 ; Description : This function is called by OSIntExit() to perform a context
01B0 ; switch to a task that has been made ready-to-run by an ISR.
01B0 ;
01B0 ; Note(s):
01B0 ; 1) Upon entry,
01B0 ; OSTCBCur points to the OS_TCB of the task to suspend
01B0 ; OSTCBHighRdy points to the OS_TCB of the task to resume
01B0 ;
01B0 ; 2) The stack frame of the task to suspend looks as follows:
01B0 ;
01B0 ; SP +0 --> LSB of return address of OSIntCtxSw() (Low memory)
01B0 ; +1 MSB of return address of OSIntCtxSw()
01B0 ; +2 LSB of return address of OSIntExit()
01B0 ; +3 MSB of return address of OSIntExit()
01B0 ; +4 LSB of task code address
01B0 ; +5 MSB of task code address (High memory)
01B0 ;
01B0 ; 3) The saved context of the task to resume looks as follows:
01B0 ;
01B0 ; OSTCBHighRdy->OSTCBStkPtr --> LSB of (return) stack pointer (Low mem)
01B0 ; MSB of (return) stack pointer
01B0 ; Flags to load in status register
01B0 ; R31
01B0 ; R30
01B0 ; R7
01B0 ; .
01B0 ; .
01B0 ; .
01B0 ; R0 (High memory)
01B0 ;*******************************************************************************
01B0
01B0 _OSIntCtxSw::
01B0 EDB7 IN R30,SPL ; Z = SP
01B2 FEB7 IN R31,SPH
01B4 ; ADIW R30,4 ; (Uncomment if OS_CRITICAL_METHOD is 1, see OS_CPU.H)
01B4 3596 ADIW R30,5 ; Adjust Z to point to task return address
01B6 FA93 ST -Y,R31 ; Save SP
01B8 EA93 ST -Y,R30 ;
01BA
01BA E0910000 LDS R30,_OSTCBCur ; Z = OSTCBCur->OSTCBStkPtr
01BE F0910100 LDS R31,_OSTCBCur+1 ;
01C2 C193 ST Z+,R28 ; Save Y pointer
01C4 D193 ST Z+,R29 ;
01C6
01C6 00910000 LDS R16,_OSPrioHighRdy ; OSPrioCur = OSPrioHighRdy
01CA 00930000 STS _OSPrioCur,R16 ;
01CE
01CE E0910000 LDS R30,_OSTCBHighRdy ; Z = OSTCBHighRdy->OSTCBStkPtr
01D2 F0910100 LDS R31,_OSTCBHighRdy+1 ;
01D6 E0930000 STS _OSTCBCur,R30 ; OSTCBCur = OSTCBHighRdy
01DA F0930100 STS _OSTCBCur+1,R31 ;
01DE
01DE C191 LD R28,Z+ ; Restore Y pointer
01E0 D191 LD R29,Z+ ;
01E2
01E2 0991 LD R16,Y+
01E4 0DBF OUT SPL,R16
01E6 0991 LD R16,Y+
01E8 0EBF OUT SPH,R16
01EA 0991 LD R16,Y+
01EC 0FBF OUT SREG,R16
01EE F991 LD R31,Y+
01F0 E991 LD R30,Y+
01F2 B991 LD R27,Y+
01F4 A991 LD R26,Y+
01F6 9991 LD R25,Y+
01F8 8991 LD R24,Y+
01FA 7991 LD R23,Y+
01FC 6991 LD R22,Y+
01FE 5991 LD R21,Y+
0200 4991 LD R20,Y+
0202 3991 LD R19,Y+
0204 2991 LD R18,Y+
0206 1991 LD R17,Y+
0208 0991 LD R16,Y+
020A F990 LD R15,Y+
020C E990 LD R14,Y+
020E D990 LD R13,Y+
0210 C990 LD R12,Y+
0212 B990 LD R11,Y+
0214 A990 LD R10,Y+
0216 9990 LD R9,Y+
0218 8990 LD R8,Y+
021A 7990 LD R7,Y+
021C 6990 LD R6,Y+
021E 5990 LD R5,Y+
0220 4990 LD R4,Y+
0222 3990 LD R3,Y+
0224 2990 LD R2,Y+
0226 1990 LD R1,Y+
0228 0990 LD R0,Y+
022A ; SEI
022A 0895 RET
022C
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -