?? os_core.lst
字號:
1 .file "OS_Core.c"
2 .arch at90s8515
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
64 .global OSInit
66 OSInit:
1:C:/WinAVR/minOS_WinAVR/OS_Core.c **** /*
2:C:/WinAVR/minOS_WinAVR/OS_Core.c **** ***************************************************************************************************
3:C:/WinAVR/minOS_WinAVR/OS_Core.c **** * minOS 0.01v
4:C:/WinAVR/minOS_WinAVR/OS_Core.c **** * The Real-Time OS Kernel
5:C:/WinAVR/minOS_WinAVR/OS_Core.c **** * All Rights Reserved
6:C:/WinAVR/minOS_WinAVR/OS_Core.c **** * File : OS_Core.C
7:C:/WinAVR/minOS_WinAVR/OS_Core.c **** * 作者 : 21icbbs網友 LM7556 ,2004年7月 by : LM7556 , China , 2004-2004
8:C:/WinAVR/minOS_WinAVR/OS_Core.c **** *
9:C:/WinAVR/minOS_WinAVR/OS_Core.c **** ***************************************************************************************************
10:C:/WinAVR/minOS_WinAVR/OS_Core.c **** */
11:C:/WinAVR/minOS_WinAVR/OS_Core.c ****
12:C:/WinAVR/minOS_WinAVR/OS_Core.c ****
13:C:/WinAVR/minOS_WinAVR/OS_Core.c **** #define OS_GLOBALS
14:C:/WinAVR/minOS_WinAVR/OS_Core.c **** #include "OS_Includes.h"
15:C:/WinAVR/minOS_WinAVR/OS_Core.c ****
16:C:/WinAVR/minOS_WinAVR/OS_Core.c **** #define NULL 0
17:C:/WinAVR/minOS_WinAVR/OS_Core.c **** // initialization OSTCB --- 初始化任務控制塊.
18:C:/WinAVR/minOS_WinAVR/OS_Core.c **** void OSInit(void)
19:C:/WinAVR/minOS_WinAVR/OS_Core.c **** { INT8U i;
68 .LM1:
69 /* prologue: frame size=0 */
70 /* prologue end (size=0) */
20:C:/WinAVR/minOS_WinAVR/OS_Core.c **** OS_TCB *pOS_TCB;
21:C:/WinAVR/minOS_WinAVR/OS_Core.c **** pOS_TCB=OSTCB;
72 .LM2:
73 0000 E0E0 ldi r30,lo8(OSTCB)
74 0002 F0E0 ldi r31,hi8(OSTCB)
75 0004 9FEF ldi r25,lo8(-1)
76 0006 84E0 ldi r24,lo8(4)
77 .L5:
22:C:/WinAVR/minOS_WinAVR/OS_Core.c **** for (i=0;i<OS_MAX_TASKS;i++,pOS_TCB++)
23:C:/WinAVR/minOS_WinAVR/OS_Core.c **** {
24:C:/WinAVR/minOS_WinAVR/OS_Core.c **** pOS_TCB->OSStkTop=(INT16U)NULL;
79 .LM3:
80 0008 1082 st Z,__zero_reg__
81 000a 1182 std Z+1,__zero_reg__
25:C:/WinAVR/minOS_WinAVR/OS_Core.c **** pOS_TCB->OSTaskStatus=no_TASK_Rdy;
83 .LM4:
84 000c 9283 std Z+2,r25
26:C:/WinAVR/minOS_WinAVR/OS_Core.c **** pOS_TCB->OSTimeDly=0;
86 .LM5:
87 000e 1382 std Z+3,__zero_reg__
88 0010 1482 std Z+4,__zero_reg__
90 .LM6:
91 0012 8150 subi r24,lo8(-(-1))
92 0014 3596 adiw r30,5
93 0016 87FF sbrs r24,7
94 0018 F7CF rjmp .L5
95 /* epilogue: frame size=0 */
96 001a 0895 ret
97 /* epilogue end (size=1) */
98 /* function OSInit size 14 (13) */
103 .global OSStart
105 OSStart:
27:C:/WinAVR/minOS_WinAVR/OS_Core.c **** }
28:C:/WinAVR/minOS_WinAVR/OS_Core.c **** }
29:C:/WinAVR/minOS_WinAVR/OS_Core.c ****
30:C:/WinAVR/minOS_WinAVR/OS_Core.c **** //Start OS --- 啟動OS
31:C:/WinAVR/minOS_WinAVR/OS_Core.c **** void OSStart(void)
32:C:/WinAVR/minOS_WinAVR/OS_Core.c **** {
107 .LM7:
108 /* prologue: frame size=0 */
109 /* prologue end (size=0) */
33:C:/WinAVR/minOS_WinAVR/OS_Core.c **** Init_OS_Timer();
111 .LM8:
112 001c 00D0 rcall InitOSTimer
34:C:/WinAVR/minOS_WinAVR/OS_Core.c **** OS_TASK_CrtPrio=Task_main_Prio;
114 .LM9:
115 001e 1092 0000 sts OS_TASK_CrtPrio,__zero_reg__
35:C:/WinAVR/minOS_WinAVR/OS_Core.c **** OS_TASK_HighPri=OS_TASK_CrtPrio;
117 .LM10:
118 0022 1092 0000 sts OS_TASK_HighPri,__zero_reg__
36:C:/WinAVR/minOS_WinAVR/OS_Core.c **** OSTCB[OS_TASK_HighPri].OSTaskStatus=OS_TASK_Run;
120 .LM11:
121 0026 8BEF ldi r24,lo8(-5)
122 0028 8093 0000 sts OSTCB+2,r24
37:C:/WinAVR/minOS_WinAVR/OS_Core.c **** OS_INT_ENABLE();
38:C:/WinAVR/minOS_WinAVR/OS_Core.c **** OS_TASK_INT();
124 .LM12:
125 002c 00D0 rcall OSCtxSw
126 /* epilogue: frame size=0 */
127 002e 0895 ret
128 /* epilogue end (size=1) */
129 /* function OSStart size 10 (9) */
133 OSPrioHighRdy:
39:C:/WinAVR/minOS_WinAVR/OS_Core.c **** }
40:C:/WinAVR/minOS_WinAVR/OS_Core.c ****
41:C:/WinAVR/minOS_WinAVR/OS_Core.c **** //返回優先級最高的處于就緒態任務的優先級,否則返回no_TASK_Rdy。
42:C:/WinAVR/minOS_WinAVR/OS_Core.c **** static INT8U OSPrioHighRdy(void)
43:C:/WinAVR/minOS_WinAVR/OS_Core.c **** { INT8U i;
135 .LM13:
136 /* prologue: frame size=0 */
137 /* prologue end (size=0) */
44:C:/WinAVR/minOS_WinAVR/OS_Core.c **** OS_TCB *pOS_TCB;
45:C:/WinAVR/minOS_WinAVR/OS_Core.c **** pOS_TCB=OSTCB;
139 .LM14:
140 0030 E0E0 ldi r30,lo8(OSTCB)
141 0032 F0E0 ldi r31,hi8(OSTCB)
46:C:/WinAVR/minOS_WinAVR/OS_Core.c **** for (i=0;i<OS_MAX_TASKS;i++,pOS_TCB++)
143 .LM15:
144 0034 A0E0 ldi r26,lo8(0)
145 0036 60E0 ldi r22,lo8(0)
146 0038 70E0 ldi r23,hi8(0)
147 .L16:
47:C:/WinAVR/minOS_WinAVR/OS_Core.c **** {
48:C:/WinAVR/minOS_WinAVR/OS_Core.c **** if ((pOS_TCB->OSStkTop!=(INT8U)NULL) & (pOS_TCB->OSTaskStatus==OS_TASK_Rdy)) {return i;}
149 .LM16:
150 003a 20E0 ldi r18,lo8(0)
151 003c 30E0 ldi r19,hi8(0)
152 003e 8081 ld r24,Z
153 0040 9181 ldd r25,Z+1
154 0042 892B or r24,r25
155 0044 11F0 breq .L14
156 0046 21E0 ldi r18,lo8(1)
157 0048 30E0 ldi r19,hi8(1)
158 .L14:
159 004a 40E0 ldi r20,lo8(0)
160 004c 50E0 ldi r21,hi8(0)
161 004e 8281 ldd r24,Z+2
162 0050 8C3F cpi r24,lo8(-4)
163 0052 11F4 brne .L15
164 0054 41E0 ldi r20,lo8(1)
165 0056 50E0 ldi r21,hi8(1)
166 .L15:
167 0058 2423 and r18,r20
168 005a 3523 and r19,r21
169 005c 232B or r18,r19
170 005e 19F0 breq .L12
171 0060 972F mov r25,r23
172 0062 862F mov r24,r22
173 0064 0895 ret
174 .L12:
176 .LM17:
177 0066 AF5F subi r26,lo8(-(1))
178 0068 6F5F subi r22,lo8(-(1))
179 006a 7F4F sbci r23,hi8(-(1))
180 006c 3596 adiw r30,5
181 006e A530 cpi r26,lo8(5)
182 0070 20F3 brlo .L16
49:C:/WinAVR/minOS_WinAVR/OS_Core.c **** }
50:C:/WinAVR/minOS_WinAVR/OS_Core.c **** return no_TASK_Rdy;
184 .LM18:
185 0072 8FEF ldi r24,lo8(255)
186 0074 90E0 ldi r25,hi8(255)
51:C:/WinAVR/minOS_WinAVR/OS_Core.c **** }
188 .LM19:
189 0076 0895 ret
190 /* epilogue: frame size=0 */
191 0078 0895 ret
192 /* epilogue end (size=1) */
193 /* function OSPrioHighRdy size 37 (36) */
198 .global OSTimeTick
200 OSTimeTick:
52:C:/WinAVR/minOS_WinAVR/OS_Core.c ****
53:C:/WinAVR/minOS_WinAVR/OS_Core.c **** //Task OSTimeDly Decrease 1 per Time Tick --- 每個時鐘節拍,任務等待延時的時間OSTimeDly減1.
54:C:/WinAVR/minOS_WinAVR/OS_Core.c **** //如果任務的OSTimeDly減到0,把任務設置為準備就緒OS_TASK_Rdy。
55:C:/WinAVR/minOS_WinAVR/OS_Core.c **** void OSTimeTick(void)
56:C:/WinAVR/minOS_WinAVR/OS_Core.c **** { INT8U i;
202 .LM20:
203 /* prologue: frame size=0 */
204 /* prologue end (size=0) */
57:C:/WinAVR/minOS_WinAVR/OS_Core.c **** OS_TCB *pOS_TCB;
58:C:/WinAVR/minOS_WinAVR/OS_Core.c **** pOS_TCB=OSTCB;
206 .LM21:
207 007a E0E0 ldi r30,lo8(OSTCB)
208 007c F0E0 ldi r31,hi8(OSTCB)
209 007e 3CEF ldi r19,lo8(-4)
210 0080 24E0 ldi r18,lo8(4)
211 .L25:
59:C:/WinAVR/minOS_WinAVR/OS_Core.c **** for (i=0;i<OS_MAX_TASKS;i++,pOS_TCB++)
60:C:/WinAVR/minOS_WinAVR/OS_Core.c **** {
61:C:/WinAVR/minOS_WinAVR/OS_Core.c **** if (pOS_TCB->OSTimeDly>OS_TASK_TimeOut)
213 .LM22:
214 0082 8381 ldd r24,Z+3
215 0084 9481 ldd r25,Z+4
216 0086 0097 sbiw r24,0
217 0088 31F0 breq .L22
62:C:/WinAVR/minOS_WinAVR/OS_Core.c **** {
63:C:/WinAVR/minOS_WinAVR/OS_Core.c **** if (--pOS_TCB->OSTimeDly==0) {pOS_TCB->OSTaskStatus=OS_TASK_Rdy;}
219 .LM23:
220 008a 0197 sbiw r24,1
221 008c 8383 std Z+3,r24
222 008e 9483 std Z+4,r25
223 0090 892B or r24,r25
224 0092 09F4 brne .L22
225 0094 3283 std Z+2,r19
226 .L22:
228 .LM24:
229 0096 2150 subi r18,lo8(-(-1))
230 0098 3596 adiw r30,5
231 009a 27FF sbrs r18,7
232 009c F2CF rjmp .L25
64:C:/WinAVR/minOS_WinAVR/OS_Core.c **** }
65:C:/WinAVR/minOS_WinAVR/OS_Core.c **** }
66:C:/WinAVR/minOS_WinAVR/OS_Core.c **** OS_TASK_HighPri=OSPrioHighRdy();
234 .LM25:
235 009e C8DF rcall OSPrioHighRdy
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -