?? os_cpu_a.lis
字號:
0034 F991 LD R31,Y+
0036 E991 LD R30,Y+
0038 B991 LD R27,Y+
003A A991 LD R26,Y+
003C 9991 LD R25,Y+
003E 8991 LD R24,Y+
0040 7991 LD R23,Y+
0042 6991 LD R22,Y+
0044 5991 LD R21,Y+
0046 4991 LD R20,Y+
0048 3991 LD R19,Y+
004A 2991 LD R18,Y+
004C 1991 LD R17,Y+
004E 0991 LD R16,Y+
0050 F990 LD R15,Y+
0052 E990 LD R14,Y+
0054 D990 LD R13,Y+
0056 C990 LD R12,Y+
0058 B990 LD R11,Y+
005A A990 LD R10,Y+
005C 9990 LD R9,Y+
005E 8990 LD R8,Y+
0060 7990 LD R7,Y+
0062 6990 LD R6,Y+
0064 5990 LD R5,Y+
0066 4990 LD R4,Y+
0068 3990 LD R3,Y+
006A 2990 LD R2,Y+
006C 1990 LD R1,Y+
006E 0990 LD R0,Y+
0070 0895 RET ; Start task
0072
0072 ;/*$PAGE*/.
0072 ;********************************************************************************************************
0072 ; TASK LEVEL CONTEXT SWITCH
0072 ;
0072 ; Description : This function is called when a task makes a higher priority task ready-to-run.
0072 ;
0072 ; Note(s) : 1) Upon entry,
0072 ; OSTCBCur points to the OS_TCB of the task to suspend
0072 ; OSTCBHighRdy points to the OS_TCB of the task to resume
0072 ;
0072 ; 2) The stack frame of the task to suspend looks as follows:
0072 ;
0072 ; SP+0 --> LSB of task code address
0072 ; +1 MSB of task code address (High memory)
0072 ;
0072 ; 3) The saved context of the task to resume looks as follows:
0072 ;
0072 ; OSTCBHighRdy->OSTCBStkPtr --> SPL of (return) stack pointer (Low memory)
0072 ; SPH of (return) stack pointer
0072 ; Flags to load in status register
0072 ; R31
0072 ; R30
0072 ; R27
0072 ; .
0072 ; .
0072 ; R0
0072 ; PCH
0072 ; PCL (High memory)
0072 ;********************************************************************************************************
0072
0072 _OSCtxSw::
0072 0A92 ST -Y,R0
0074 1A92 ST -Y,R1
0076 2A92 ST -Y,R2
0078 3A92 ST -Y,R3
007A 4A92 ST -Y,R4
007C 5A92 ST -Y,R5
007E 6A92 ST -Y,R6
0080 7A92 ST -Y,R7
0082 8A92 ST -Y,R8
0084 9A92 ST -Y,R9
0086 AA92 ST -Y,R10
0088 BA92 ST -Y,R11
008A CA92 ST -Y,R12
008C DA92 ST -Y,R13
008E EA92 ST -Y,R14
0090 FA92 ST -Y,R15
0092 0A93 ST -Y,R16
0094 1A93 ST -Y,R17
0096 2A93 ST -Y,R18
0098 3A93 ST -Y,R19
009A 4A93 ST -Y,R20
009C 5A93 ST -Y,R21
009E 6A93 ST -Y,R22
00A0 7A93 ST -Y,R23
00A2 8A93 ST -Y,R24
00A4 9A93 ST -Y,R25
00A6 AA93 ST -Y,R26
00A8 BA93 ST -Y,R27
00AA EA93 ST -Y,R30
00AC FA93 ST -Y,R31
00AE 0BB7 IN R16,RAMPZ
00B0 0A93 ST -Y,R16
00B2 0FB7 IN R16,SREG
00B4 0A93 ST -Y,R16
00B6 0EB7 IN R16,SPH
00B8 0A93 ST -Y,R16
00BA 0DB7 IN R16,SPL
00BC 0A93 ST -Y,R16
00BE
00BE E0910000 LDS R30,_OSTCBCur ; Z = OSTCBCur->OSTCBStkPtr
00C2 F0910100 LDS R31,_OSTCBCur+1 ;
00C6 C193 ST Z+,R28 ; Save Y (R29:R28) pointer
00C8 D193 ST Z+,R29 ;
00CA
00CA 0E940000 CALL _OSTaskSwHook ; Call user defined task switch hook
00CE
00CE 00910000 LDS R16,_OSPrioHighRdy ; OSPrioCur = OSPrioHighRdy
00D2 00930000 STS _OSPrioCur,R16
00D6
00D6 E0910000 LDS R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
00DA F0910100 LDS R31,_OSTCBHighRdy+1 ; ready to run
00DE E0930000 STS _OSTCBCur,R30 ; OSTCBCur = OSTCBHighRdy
00E2 F0930100 STS _OSTCBCur+1,R31 ;
00E6
00E6 C191 LD R28,Z+ ; Restore Y pointer
00E8 D191 LD R29,Z+ ;
00EA
00EA 0991 LD R16,Y+
00EC 0DBF OUT SPL,R16
00EE 0991 LD R16,Y+
00F0 0EBF OUT SPH,R16
00F2 0991 LD R16,Y+
00F4 0FBF OUT SREG,R16
00F6 0991 LD R16,Y+
00F8 0BBF OUT RAMPZ,R16
00FA F991 LD R31,Y+
00FC E991 LD R30,Y+
00FE B991 LD R27,Y+
0100 A991 LD R26,Y+
0102 9991 LD R25,Y+
0104 8991 LD R24,Y+
0106 7991 LD R23,Y+
0108 6991 LD R22,Y+
010A 5991 LD R21,Y+
010C 4991 LD R20,Y+
010E 3991 LD R19,Y+
0110 2991 LD R18,Y+
0112 1991 LD R17,Y+
0114 0991 LD R16,Y+
0116 F990 LD R15,Y+
0118 E990 LD R14,Y+
011A D990 LD R13,Y+
011C C990 LD R12,Y+
011E B990 LD R11,Y+
0120 A990 LD R10,Y+
0122 9990 LD R9,Y+
0124 8990 LD R8,Y+
0126 7990 LD R7,Y+
0128 6990 LD R6,Y+
012A 5990 LD R5,Y+
012C 4990 LD R4,Y+
012E 3990 LD R3,Y+
0130 2990 LD R2,Y+
0132 1990 LD R1,Y+
0134 0990 LD R0,Y+
0136
0136 0895 RET
0138
0138 ;/*$PAGE*/.
0138 ;*********************************************************************************************************
0138 ; INTERRUPT LEVEL CONTEXT SWITCH
0138 ;
0138 ; Description : This function is called by OSIntExit() to perform a context switch to a task that has
0138 ; been made ready-to-run by an ISR.
0138 ;
0138 ; Note(s) : 1) Upon entry,
0138 ; OSTCBCur points to the OS_TCB of the task to suspend
0138 ; OSTCBHighRdy points to the OS_TCB of the task to resume
0138 ;
0138 ; 2) The stack frame of the task to suspend looks as follows:
0138 ;
0138 ; OSTCBCur->OSTCBStkPtr ------> SPL of (return) stack pointer (Low memory)
0138 ; SPH of (return) stack pointer
0138 ; Flags to load in status register
0138 ; R31
0138 ; R30
0138 ; R27
0138 ; .
0138 ; .
0138 ; R0
0138 ; PCH
0138 ; PCL (High memory)
0138 ;
0138 ; 3) The saved context of the task to resume looks as follows:
0138 ;
0138 ; OSTCBHighRdy->OSTCBStkPtr --> SPL of (return) stack pointer (Low memory)
0138 ; SPH of (return) stack pointer
0138 ; Flags to load in status register
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -