📄 os_core.lst
字号:
280 .LM15:
281 0068 8091 0000 lds r24,OSIntNesting
282 006c 8823 tst r24
283 006e 81F4 brne .L9
126:OS_CORE.c **** {
127:OS_CORE.c **** #endif
128:OS_CORE.c ****
129:OS_CORE.c **** Os_Enter_Sum = 0; /* 因为在中断中,所以关中断计数器为0 */
285 .LM16:
286 0070 8093 0000 sts Os_Enter_Sum,r24
130:OS_CORE.c **** #if OS_MAX_TASKS < 9
131:OS_CORE.c **** /* 查找处于就绪状态的任务中优先级最高的任务 */
132:OS_CORE.c **** temp = OSTaskRuning;
288 .LM17:
289 0074 9091 0000 lds r25,OSTaskRuning
133:OS_CORE.c **** for (OSNextTaskID = 0; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
291 .LM18:
292 0078 8093 0000 sts OSNextTaskID,r24
293 .L14:
134:OS_CORE.c **** {
135:OS_CORE.c **** if ((temp & 0x01) != 0)
295 .LM19:
296 007c 90FD sbrc r25,0
297 007e 04C0 rjmp .L17
136:OS_CORE.c **** {
137:OS_CORE.c **** break;
138:OS_CORE.c **** }
139:OS_CORE.c **** temp = temp >> 1;
299 .LM20:
300 0080 9695 lsr r25
302 .LM21:
303 0082 8F5F subi r24,lo8(-(1))
304 0084 8430 cpi r24,lo8(4)
305 0086 D0F3 brlo .L14
306 .L17:
307 0088 8093 0000 sts OSNextTaskID,r24
140:OS_CORE.c **** }
141:OS_CORE.c **** OSIntCtxSw(); /* 进行任务调度 */
309 .LM22:
310 008c 0E94 0000 call OSIntCtxSw
311 .L9:
142:OS_CORE.c **** #else
143:OS_CORE.c **** /* 查找处于就绪状态的任务中优先级最高的任务 */
144:OS_CORE.c **** temp = OSTaskRuning % 256;
145:OS_CORE.c **** for (OSNextTaskID = 0; OSNextTaskID < 8; OSNextTaskID++)
146:OS_CORE.c **** {
147:OS_CORE.c **** if ((temp & 0x01) != 0)
148:OS_CORE.c **** {
149:OS_CORE.c **** goto TaskSw;
150:OS_CORE.c **** }
151:OS_CORE.c **** temp = temp >> 1;
152:OS_CORE.c **** }
153:OS_CORE.c ****
154:OS_CORE.c **** temp = OSTaskRuning / 256;
155:OS_CORE.c **** for (; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
156:OS_CORE.c **** {
157:OS_CORE.c **** if ((temp & 0x01) != 0)
158:OS_CORE.c **** {
159:OS_CORE.c **** break;
160:OS_CORE.c **** }
161:OS_CORE.c **** temp = temp >> 1;
162:OS_CORE.c **** }
163:OS_CORE.c **** TaskSw:
164:OS_CORE.c **** OSIntCtxSw(); /* 进行任务调度 */
165:OS_CORE.c **** #endif
166:OS_CORE.c ****
167:OS_CORE.c **** #if EN_OS_INT_ENTER >0
168:OS_CORE.c **** }
169:OS_CORE.c **** #endif
170:OS_CORE.c **** OS_EXIT_CRITICAL();
313 .LM23:
314 0090 8091 0000 lds r24,Os_Enter_Sum
315 0094 8150 subi r24,lo8(-(-1))
316 0096 8093 0000 sts Os_Enter_Sum,r24
317 009a 8823 tst r24
318 009c 09F4 brne .L7
319 /* #APP */
320 009e 7894 sei
321 /* #NOAPP */
322 .L7:
323 00a0 0895 ret
324 /* epilogue: frame size=0 */
325 /* epilogue: noreturn */
326 /* epilogue end (size=0) */
327 /* function OSIntExit size 44 (44) */
332 .Lscope2:
334 .global OSSched
336 OSSched:
171:OS_CORE.c **** }
172:OS_CORE.c ****
173:OS_CORE.c **** /**************************************************************************************************
174:OS_CORE.c **** ** 函数名称: OSSched
175:OS_CORE.c **** ** 功能描述: 非中断的任务切换函数
176:OS_CORE.c **** ** 输 入: 无
177:OS_CORE.c **** ** 输 出: 无
178:OS_CORE.c **** ** 全局变量: OSIntNesting,OSNextTaskID
179:OS_CORE.c **** ** 调用模块: OS_TASK_SW
180:OS_CORE.c **** * 日 期:
181:OS_CORE.c **** ***************************************************************************************************
182:OS_CORE.c **** void OSSched(void)
183:OS_CORE.c ****
184:OS_CORE.c **** {
338 .LM24:
339 /* prologue: frame size=0 */
340 /* prologue end (size=0) */
185:OS_CORE.c **** uint8 temp;
186:OS_CORE.c ****
187:OS_CORE.c **** OS_ENTER_CRITICAL();
342 .LM25:
343 /* #APP */
344 00a2 F894 cli
345 /* #NOAPP */
346 00a4 8091 0000 lds r24,Os_Enter_Sum
347 00a8 8F5F subi r24,lo8(-(1))
348 00aa 8093 0000 sts Os_Enter_Sum,r24
188:OS_CORE.c **** #if EN_OS_INT_ENTER > 0
189:OS_CORE.c **** if (OSIntNesting == 0) /* 是否是中断中调用 */
350 .LM26:
351 00ae 8091 0000 lds r24,OSIntNesting
352 00b2 8823 tst r24
353 00b4 71F4 brne .L19
190:OS_CORE.c **** {
191:OS_CORE.c **** #endif
192:OS_CORE.c ****
193:OS_CORE.c **** #if OS_MAX_TASKS < 9
194:OS_CORE.c **** /* 查找处于就绪状态的任务中优先级最高的任务 */
195:OS_CORE.c **** temp = OSTaskRuning;
355 .LM27:
356 00b6 9091 0000 lds r25,OSTaskRuning
196:OS_CORE.c **** for (OSNextTaskID = 0; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
358 .LM28:
359 00ba 8093 0000 sts OSNextTaskID,r24
360 .L24:
197:OS_CORE.c **** {
198:OS_CORE.c **** if ((temp & 0x01) != 0)
362 .LM29:
363 00be 90FD sbrc r25,0
364 00c0 04C0 rjmp .L27
199:OS_CORE.c **** {
200:OS_CORE.c **** break;
201:OS_CORE.c **** }
202:OS_CORE.c **** temp = temp >> 1;
366 .LM30:
367 00c2 9695 lsr r25
369 .LM31:
370 00c4 8F5F subi r24,lo8(-(1))
371 00c6 8430 cpi r24,lo8(4)
372 00c8 D0F3 brlo .L24
373 .L27:
374 00ca 8093 0000 sts OSNextTaskID,r24
203:OS_CORE.c **** }
204:OS_CORE.c **** OS_TASK_SW(); /* 进行任务调度 */
376 .LM32:
377 00ce 0E94 0000 call OSCtxSw
378 .L19:
205:OS_CORE.c **** #else
206:OS_CORE.c **** /* 查找处于就绪状态的任务中优先级最高的任务 */
207:OS_CORE.c **** temp = OSTaskRuning % 256;
208:OS_CORE.c **** for (OSNextTaskID = 0; OSNextTaskID < 8; OSNextTaskID++)
209:OS_CORE.c **** {
210:OS_CORE.c **** if ((temp & 0x01) != 0)
211:OS_CORE.c **** {
212:OS_CORE.c **** goto TaskSw;
213:OS_CORE.c **** }
214:OS_CORE.c **** temp = temp >> 1;
215:OS_CORE.c **** }
216:OS_CORE.c ****
217:OS_CORE.c **** temp = OSTaskRuning / 256 ;
218:OS_CORE.c **** for (; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
219:OS_CORE.c **** {
220:OS_CORE.c **** if ((temp & 0x01) != 0)
221:OS_CORE.c **** {
222:OS_CORE.c **** break;
223:OS_CORE.c **** }
224:OS_CORE.c **** temp = temp >> 1;
225:OS_CORE.c **** }
226:OS_CORE.c **** TaskSw:
227:OS_CORE.c **** OS_TASK_SW(); /* 进行任务调度 */
228:OS_CORE.c **** #endif
229:OS_CORE.c ****
230:OS_CORE.c **** #if EN_OS_INT_ENTER > 0
231:OS_CORE.c **** }
232:OS_CORE.c **** #endif
233:OS_CORE.c **** OS_EXIT_CRITICAL();
380 .LM33:
381 00d2 8091 0000 lds r24,Os_Enter_Sum
382 00d6 8150 subi r24,lo8(-(-1))
383 00d8 8093 0000 sts Os_Enter_Sum,r24
384 00dc 8823 tst r24
385 00de 09F4 brne .L18
386 /* #APP */
387 00e0 7894 sei
388 /* #NOAPP */
389 .L18:
390 00e2 0895 ret
391 /* epilogue: frame size=0 */
392 /* epilogue: noreturn */
393 /* epilogue end (size=0) */
394 /* function OSSched size 35 (35) */
399 .Lscope3:
402 .global OSSendSignal
404 OSSendSignal:
406 .LM34:
407 /* prologue: frame size=0 */
408 /* prologue end (size=0) */
410 .LM35:
411 00e4 0E94 0000 call OSIntSendSignal
413 .LM36:
414 00e8 0E94 0000 call OSSched
415 /* epilogue: frame size=0 */
416 00ec 0895 ret
417 /* epilogue end (size=1) */
418 /* function OSSendSignal size 5 (4) */
420 .Lscope4:
422 .global OSTimeTick
424 OSTimeTick:
234:OS_CORE.c **** }
235:OS_CORE.c ****
236:OS_CORE.c **** /**************************************************************************************************
237:OS_CORE.c **** ** 函数名称: OSTimeTick
238:OS_CORE.c **** ** 功能描述: 系统时钟处理函数,处理各个任务的延时
239:OS_CORE.c **** ** 输 入: 无
240:OS_CORE.c **** ** 输 出: 无
241:OS_CORE.c **** ** 全局变量: OSWaitTick
242:OS_CORE.c **** ** 调用模块: OSIntSendSignal
243:OS_CORE.c **** ***************************************************************************************************
244:OS_CORE.c **** void OSTimeTick(void)
245:OS_CORE.c **** {
426 .LM37:
427 /* prologue: frame size=0 */
428 00ee 1F93 push r17
429 00f0 CF93 push r28
430 00f2 DF93 push r29
431 /* prologue end (size=3) */
246:OS_CORE.c **** uint8 i;
247:OS_CORE.c ****
248:OS_CORE.c **** for (i = 0; i < OS_MAX_TASKS; i++)
433 .LM38:
434 00f4 10E0 ldi r17,lo8(0)
435 00f6 C0E0 ldi r28,lo8(OSWaitTick)
436 00f8 D0E0 ldi r29,hi8(OSWaitTick)
437 .L35:
249:OS_CORE.c **** {
250:OS_CORE.c **** if (OSWaitTick[i] != 0 )
439 .LM39:
440 00fa 8881 ld r24,Y
441 00fc 8823 tst r24
442 00fe 39F0 breq .L32
251:OS_CORE.c **** {
252:OS_CORE.c **** OSWaitTick[i]--;
444 .LM40:
445 0100 8150 subi r24,lo8(-(-1))
446 0102 8883 st Y,r24
253:OS_CORE.c **** if (OSWaitTick[i] == 0)
448 .LM41:
449 0104 8823 tst r24
450 0106 19F4 brne .L32
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -