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