📄 tasksw.lst.svn-base
字号:
GAS LISTING /tmp/ccGJaoaJ.s page 1 1 # 1 "OS/Task/TaskSw.S" 2 # 1 "/home/zzxiong/osek//" 1 .include "os_cpu_a.inc"
1 ... 0 0 1 #include "ppc_asm.h"
2 /*
3 * STACK FRAME DEFINITION
4 */
5
6 .equ XR30 ,0
7 .equ XR1 ,XR30+4
8 .equ XR2 ,XR1+4
9 .equ XR3 ,XR2+4
10 .equ XR4 ,XR3+4
11 .equ XR5 ,XR4+4
12 .equ XR6 ,XR5+4
13 .equ XR7 ,XR6+4
14 .equ XR8 ,XR7+4
15 .equ XR9 ,XR8+4
16 .equ XR10 ,XR9+4
17 .equ XR11 ,XR10+4
18 .equ XR12 ,XR11+4
19 .equ XR13 ,XR12+4
20 .equ XR14 ,XR13+4
21 .equ XR15 ,XR14+4
22 .equ XR16 ,XR15+4
23 .equ XR17 ,XR16+4
24 .equ XR18 ,XR17+4
25 .equ XR19 ,XR18+4
26 .equ XR20 ,XR19+4
27 .equ XR21 ,XR20+4
28 .equ XR22 ,XR21+4
29 .equ XR23 ,XR22+4
30 .equ XR24 ,XR23+4
31 .equ XR25 ,XR24+4
32 .equ XR26 ,XR25+4
33 .equ XR27 ,XR26+4
34 .equ XR28 ,XR27+4
35 .equ XR29 ,XR28+4
36 .equ XR31 ,XR29+4
37 .equ XR0 ,XR31+4
38
39 .equ XSRR0 ,XR0+4
40 .equ XSRR1 ,XSRR0+4
41 .equ XCTR ,XSRR1+4
42 .equ XXER ,XCTR+4
43 .equ XCR ,XXER+4
44 .equ XLR ,XCR+4
45 .equ XMSR ,XLR+4
46
47 .equ STACK_FRAME_SIZE ,XMSR+4
48
49
50 /*
51 * PROLOGUE DEFINITION
GAS LISTING /tmp/ccGJaoaJ.s page 2 52 */
53 prologue: .macro
54 stwu r30, -STACK_FRAME_SIZE(r30)
55 stw r0, XR0(r30)
56 stw r1, XR1(r30)
57 stw r2, XR2(r30) /* store GPR as 32bit Register*/
58 stw r3, XR3(r30)
59 stw r4, XR4(r30)
60 stw r5, XR5(r30)
61 stw r6, XR6(r30)
62 stw r7, XR7(r30)
63 stw r8, XR8(r30)
64 stw r9, XR9(r30)
65 stw r10, XR10(r30)
66 stw r11, XR11(r30)
67 stw r12, XR12(r30)
68 stw r13, XR13(r30)
69 stw r14, XR14(r30)
70 stw r15, XR15(r30)
71 stw r16, XR16(r30)
72 stw r17, XR17(r30)
73 stw r18, XR18(r30)
74 stw r19, XR19(r30)
75 stw r20, XR20(r30)
76 stw r21, XR21(r30)
77 stw r22, XR22(r30)
78 stw r23, XR23(r30)
79 stw r24, XR24(r30)
80 stw r25, XR25(r30)
81 stw r26, XR26(r30)
82 stw r27, XR27(r30)
83 stw r28, XR28(r30)
84 stw r29, XR29(r30)
85 stw r31, XR31(r30)
86
87 mfmsr r0
88 stw r0, XMSR(r30)
89
90 mfspr r0, SRR0
91 stw r0, XSRR0(r30)
92
93 mfspr r0, SRR1
94 stw r0, XSRR1(r30)
95
96 mflr r0
97 stw r0, XLR(r30)
98
99 mfctr r0
100 stw r0, XCTR(r30)
101
102 mfxer r0
103 stw r0, XXER(r30)
104
105 mfcr r0
106 stw r0, XCR(r30)
107 .endm
108 /*
GAS LISTING /tmp/ccGJaoaJ.s page 3 109 * EPILOGUE DEFINITION
110 */
111 epilogue: .macro
112 /* wrteei 0 */
113 lwz r1, XR1(r30)
114 lwz r2, XR2(r30) /* load GPR as 32bit Register*/
115 lwz r3, XR3(r30)
116 lwz r4, XR4(r30)
117 lwz r5, XR5(r30)
118 lwz r6, XR6(r30)
119 lwz r7, XR7(r30)
120 lwz r8, XR8(r30)
121 lwz r9, XR9(r30)
122 lwz r10, XR10(r30)
123 lwz r11, XR11(r30)
124 lwz r12, XR12(r30)
125 lwz r13, XR13(r30)
126 lwz r14, XR14(r30)
127 lwz r15, XR15(r30)
128 lwz r16, XR16(r30)
129 lwz r17, XR17(r30)
130 lwz r18, XR18(r30)
131 lwz r19, XR19(r30)
132 lwz r20, XR20(r30)
133 lwz r21, XR21(r30)
134 lwz r22, XR22(r30)
135 lwz r23, XR23(r30)
136 lwz r24, XR24(r30)
137 lwz r25, XR25(r30)
138 lwz r26, XR26(r30)
139 lwz r27, XR27(r30)
140 lwz r28, XR28(r30)
141 lwz r29, XR29(r30)
142 lwz r31, XR31(r30)
143
144 lwz r0, XCR(r30)
145 mtcrf 0xff,r0
146 lwz r0, XXER(r30)
147 mtxer r0
148 lwz r0, XCTR(r30)
149 mtctr r0
150 lwz r0, XLR(r30)
151 mtlr r0
152
153 lwz r0, XSRR1(r30)
154 mtspr SRR1,r0
155 lwz r0, XSRR0(r30)
156 mtspr SRR0,r0
157
158 lwz r0, XR0(r30)
159 addi r30, r30, STACK_FRAME_SIZE
160 .endm
161
2 .global OSStartHighRdy
3 .global OSCtxSw
4
5 /**************************************************************************************************GAS LISTING /tmp/ccGJaoaJ.s page 4 6 * START HIGHEST PRIORITY TASK READY-TO-RUN
7 *
8 * Description : This function is called by OSStart() to start the highest priority task that was c 9 * by the application before calling OSStart().
10 *
11 * Arguments : none
12 *
13 * Note(s) : 1) OSStartHighRdy() MUST:
14 * a) Call OSTaskSwHook() then,
15 * b) Set OSRunning to TRUE,
16 * c) Switch to the highest priority task by loading the stack pointer of the hig 17 * priority task into the SP register and execute an rfi instruction.
18 */
19
20
21
22
23 .align 4
24 OSStartHighRdy:
25
26 0000 38000001 li r0, 1 /*# Set OSRunning to 1*/
27 0004 3D600000 lis r11, OSRunning@ha
28 0008 980B0000 stb r0, OSRunning@l(r11)
29
30 000c 3D600000 lis r11, OSTCBHighRdy@ha /*# Get pointer to ready task TCB*/
31 0010 816B0000 lwz r11, OSTCBHighRdy@l(r11)
32
33 0014 3D800000 lis r12, OSTCBCur@ha /*/# Save as current task TCB ptr.*/
34 0018 916C0000 stw r11, OSTCBCur@l(r12)
35
36 001c 83CB0000 lwz r30, 0(r11) /*//# Get new stack pointer*/
37
38 0020 803E0004 epilogue /*/ # Restore context*/
38 805E0008 38 807E000C 38 809E0010 38 80BE0014 39
40 00d0 4C000064 rfi /*/ # run task*/
41
42
43 /************************************************************************************************** 44 * TASK LEVEL CONTEXT SWITCH
45 *
46 * Description : This function is called when a task makes a higher priority task ready-to-run.
47 *
48 * Arguments : none
49 *
50 * Note(s) : 1) Upon entry,
51 * OSTCBCur points to the OS_TCB of the task to suspend
52 * OSTCBHighRdy points to the OS_TCB of the task to resume
53 */
54
55 00d4 60000000 .align 4
55 60000000 55 60000000 56 OSCtxSw:
GAS LISTING /tmp/ccGJaoaJ.s page 5 57 00e0 97DEFF64 prologue /*/ # Save context*/
57 901E007C 57 903E0004 57 905E0008 57 907E000C 58
59 0198 3D600000 lis r11,OSTCBCur@ha /*/ # Get pointer to current TCB*/
60 019c 816B0000 lwz r11,OSTCBCur@l(r11)
61 01a0 93CB0000 stw r30, 0(r11) /*/ # Save stack pointer in current TCB*/
62
63 01a4 3D600000 lis r11,OSTCBHighRdy@ha /*/ # Get pointer to ready task TCB*/
64 01a8 816B0000 lwz r11,OSTCBHighRdy@l(r11)
65
66 01ac 3D800000 lis r12,OSTCBCur@ha /*/ # Save as current task TCB ptr.*/
67 01b0 916C0000 stw r11,OSTCBCur@l(r12)
68
69 01b4 3D800000 lis r12,OSPrioHighRdy@ha /*/ # Get High Ready Priority*/
70 01b8 894C0000 lbz r10,OSPrioHighRdy@l(r12)
71
72 01bc 3D800000 lis r12,OSPrioCur@ha /*/ # Save as Current Priority*/
73 01c0 994C0000 stb r10,OSPrioCur@l(r12)
74
75 01c4 83CB0000 lwz r30, 0(r11) /*/ # Get new stack pointer from TCB*/
76
77 01c8 803E0004 epilogue /*/ # Restore context*/
77 805E0008 77 807E000C 77 809E0010 77 80BE0014 78
79 0278 4C000064 rfi /*/ # run task*/
79 60000000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -