📄 sosos.lst
字号:
325 0108 9983 mov r24,r25
326 010a ED81 subi r24,lo8(-(-16))
327 010c FE81 cpi r24,lo8(113)
328 010e FC83 brsh .L22
330 .LM32:
331 ldd r24,Z+9
332 tst r24
333 0112 FD01 breq .L22
335 0116 892F .LM33:
336 0118 8051 subi r24,lo8(-(-1))
337 011a 8137 std Z+9,r24
339 .LM34:
340 tst r24
341 011e 8185 brne .L25
343 0122 01F0 .LM35:
344 ldd r30,Y+3
345 ldd r31,Y+4
346 0124 8150 ld r24,Z
347 0126 8187 ldd r31,Y+1
348 or r24,r31
349 ldd r30,Y+3
350 0128 8823 ldd r31,Y+4
351 012a 01F4 st Z,r24
353 .LM36:
354 012c EB81 cpi r25,lo8(17)
355 012e FC81 brlo .L27
357 0132 F981 .LM37:
358 0134 8F2B subi r25,lo8(-(112))
359 0136 EB81 movw r30,r26
360 0138 FC81 std Z+6,r25
361 013a 8083 rjmp .L29
362 .L27:
364 013c 9131 .LM38:
365 013e 00F0 movw r30,r26
366 std Z+6,__zero_reg__
367 .L29:
369 0142 FD01 .LM39:
370 0144 9683 cp r22,r16
371 0146 00C0 brsh .L22
373 .LM40:
374 ori r17,lo8(1)
375 0148 FD01 rjmp .L22
376 014a 1682 .L25:
378 .LM41:
379 or r18,r19
380 014c 6017 .L22:
118:sosos.c **** #else
119:sosos.c **** if(SOSOS_RUNNING_TASK_PRI>i){
120:sosos.c **** #endif
121:sosos.c **** set_bit(SOSOS_STATE,STATE_SCHED_REQ);
382 1,lo8(-(1))
383 std Y+2,r31
384 0150 1160 cpi r31,lo8(2)
385 0152 00C0 breq .L31
122:sosos.c **** }
123:sosos.c **** }
124:sosos.c **** else
125:sosos.c **** SOSOS_WAIT_TASK=SOSOS_WAIT_TASK|tmpi;
387 :
388 ldd r24,Y+1
389 0154 232B lsl r24
390 std Y+1,r24
126:sosos.c **** }
127:sosos.c **** }
128:sosos.c **** tmpj=tmpj<<1;
129:sosos.c **** point++;
391 p .L21
392 .L31:
393 0156 1A96 subi r20,lo8(-(20))
394 sbci r21,hi8(-(20))
396 0158 FA81 .LM45:
397 015a FF5F lsl r19
398 015c FA83 subi r22,lo8(-(1))
399 015e F230 sbci r23,hi8(-(1))
400 0160 01F0 ldd r30,Y+5
401 ldd r31,Y+6
402 adiw r30,1
403 0162 8981 std Y+6,r31
404 0164 880F std Y+5,r30
406 0168 00C0 .LM46:
407 cpi r22,3
408 016a 4C5E cpc r23,__zero_reg__
409 016c 5F4F breq .+2
130:sosos.c **** }
131:sosos.c **** tmpi=tmpi<<1;
410 r18
412 016e 330F .LM47:
413 0170 6F5F mov r24,r8
414 0172 7F4F subi r24,lo8(-(1))
415 0174 ED81 mov r8,r24
416 0176 FE81 breq .L38
418 017a FE83 .LM48:
419 017c ED83 clr r8
421 .LM49:
422 017e 6330 cp r16,r10
423 0180 7105 brne .L38
424 0182 01F0 mov r30,r16
425 0184 00C0 clr r31
426 0186 922E subi r30,lo8(-(SOSOS_TASK_READY))
132:sosos.c **** }
133:sosos.c **** //时间片轮换处理
134:sosos.c **** if((++SOSOS_TIMESLICE)>=SYS_TIMESLICE){
427 OSOS_TASK_READY))
428 ld r24,Z
429 0188 882D cpse r24,r12
431 018c 882E .LM50:
432 018e 01F0 ori r17,lo8(1)
135:sosos.c **** SOSOS_TIMESLICE=0;
433 /* epilogue: frame size=6 */
434 adiw r28,6
435 0190 8824 in __tmp_reg__,__SREG__
136:sosos.c **** #if SOSOS_MUTEX_ENABLE == 1
137:sosos.c **** if((SOSOS_RUNNING_INHERIT_PRI==SOSOS_RUNNING_TASK_PRI)&&(SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI
436 i
437 out __SP_H__,r29
438 0192 0A15 out __SREG__,__tmp_reg__
439 0194 01F4 out __SP_L__,r28
440 0196 E02F pop r29
441 0198 FF27 pop r28
442 019a E050 pop r16
443 019c F040 ret
444 019e 8081 /* epilogue end (size=10) */
445 01a0 8C11 /* function SososTimer0 size 126 (105) */
138:sosos.c **** #else
139:sosos.c **** if(SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI]!=SOSOS_RUNNING_TASK_ID_INDEX)
140:sosos.c **** #endif
141:sosos.c **** set_bit(SOSOS_STATE,STATE_SCHED_REQ);
446 osTimer0, .-SososTimer0
453 01a8 F894 .Lscope3:
455 01ac 0FBE .global SososSched
457 01b0 DF91 SososSched:
459 01b4 0F91 .LM51:
460 01b6 0895 /* prologue: frame size=0 */
461 /* prologue: naked */
462 /* prologue end (size=0) */
464 .LM52:
465 /* #APP */
466 POP __tmp_reg__
467
469 .LM53:
470 POP __tmp_reg__
471
473 .LM54:
474 /* #NOAPP */
142:sosos.c **** }
143:sosos.c **** }
144:sosos.c **** #endif
145:sosos.c ****
146:sosos.c **** #if SOSOS_TASK_ENALBE == 1
147:sosos.c **** void SososSched (void) __attribute__ ((naked));//任务调度
148:sosos.c **** void SososSched(void)//任务调度
149:sosos.c **** //本函数是任务调度的核心函数,提供优先级继承的调度支持,进入时中断应该是关闭的
150:sosos.c **** {
475 mov r17,r24
477 .LM55:
478 /* #APP */
479 SEI
151:sosos.c **** __asm__ __volatile__("POP __tmp_reg__ \n\t");
480 tabn 68,0,160,.LM56-SososSched
481 .LM56:
482 NOP
483 01b8 0F90
152:sosos.c **** __asm__ __volatile__("POP __tmp_reg__ \n\t");
485 :
486 CLI
487 01ba 0F90
153:sosos.c ****
154:sosos.c **** set_bit(SOSOS_STATE,STATE_SCHED_RUN);
489 8:
490 /* #NOAPP */
491 andi r17,lo8(-4)
492 01bc 812F mov r19,r10
493 01be 8260 mov r18,r12
155:sosos.c **** ENABLE_INTERRUPT();
495
496 mov r22,r11
497 subi r22,lo8(-(1))
498 01c2 7894 ldi r20,lo8(0)
499 ldi r21,hi8(0)
156:sosos.c **** #if SOSOS_WDT_ENABLE == 1
157:sosos.c **** //看门狗
158:sosos.c **** SOSOS_WDT_RST();//复位看门狗
159:sosos.c **** #else
160:sosos.c **** __asm__ __volatile__("NOP \n\t");
500 r26,lo8(SOSOS_TASK_READY)
501 ldi r27,hi8(SOSOS_TASK_READY)
502 01c4 0000 .L42:
161:sosos.c **** #endif
162:sosos.c **** DISABLE_INTERRUPT();
504 0:
505 ld r24,X
506 01c6 F894 tst r24
507 breq .L43
163:sosos.c ****
164:sosos.c **** SOSOS_STATE=SOSOS_STATE&(~((1<<STATE_SCHED_RUN)|(1<<STATE_SCHED_REQ)));
508 abn 68,0,172,.LM61-SososSched
509 .LM61:
510 cp r19,r20
511 01c8 1C7F breq .L45
512 01ca 3A2D mov r19,r20
513 01cc 2C2D rjmp .L68
165:sosos.c ****
166:sosos.c **** unsigned char i,j,SOSOS_TMP;
167:sosos.c ****
168:sosos.c **** //任务调度
169:sosos.c **** for(i=0;i<SOSOS_PRI_MAX;i++){
170:sosos.c **** if(SOSOS_TASK_READY[i]==0)
171:sosos.c **** continue;
172:sosos.c **** if(SOSOS_RUNNING_TASK_PRI==i){
173:sosos.c **** SOSOS_TMP=SOSOS_TASK_READY[i]&(~SOSOS_RUNNING_TASK_ID_INDEX);
174:sosos.c **** if(SOSOS_TMP==0)
175:sosos.c **** goto SososSchedEnd;
176:sosos.c ****
177:sosos.c **** if(SOSOS_TMP>SOSOS_RUNNING_TASK_ID_INDEX){
178:sosos.c **** SOSOS_TMP=SOSOS_RUNNING_TASK_ID+1;
515 .LM62:
516 01ce 6B2D ld r25,X
517 01d0 6F5F mov r24,r18
518 01d2 40E0 com r24
519 01d4 50E0 and r25,r24
521 01d8 B0E0 .LM63:
522 breq .L48
524 .LM64:
525 01da 8C91 cp r18,r25
526 01dc 8823 brlo .L50
527 01de 01F0 .L68:
528 ldi r24,lo8(0)
529 ldi r18,lo8(1)
530 01e0 3417 rjmp .L47
531 01e2 01F0 .L50:
533 01e6 00C0 .LM65:
534 lsl r18
535 mov r24,r22
536 .L47:
537 01e8 9C91 mov r25,r24
538 01ea 822F movw r30,r26
539 01ec 8095 rjmp .L52
540 01ee 9823 .L53:
542 .LM66:
543 01f0 01F0 ld r24,Z
544 and r24,r18
545 brne .L65
547 01f4 00F0 .LM67:
548 lsl r18
550 01f8 21E0 .LM68:
551 01fa 00C0 subi r25,lo8(-(1))
552 .L52:
179:sosos.c **** SOSOS_RUNNING_TASK_ID_INDEX=SOSOS_RUNNING_TASK_ID_INDEX<<1;
553 r20,lo8(-(1))
554 sbci r21,hi8(-(1))
555 01fc 220F adiw r26,1
557 .LM69:
558 0200 982F cpi r20,3
559 0202 FD01 cpc r21,__zero_reg__
560 0204 00C0 brne .L42
561 rjmp .L48
180:sosos.c **** }
181:sosos.c **** else{
182:sosos.c **** SOSOS_TMP=0;
183:sosos.c **** SOSOS_RUNNING_TASK_ID_INDEX=1;
184:sosos.c **** }
185:sosos.c **** }
186:sosos.c **** else{
187:sosos.c **** SOSOS_RUNNING_TASK_PRI=i;
188:sosos.c **** SOSOS_TMP=0;
189:sosos.c **** SOSOS_RUNNING_TASK_ID_INDEX=1;
190:sosos.c **** }
191:sosos.c ****
192:sosos.c **** for(j=SOSOS_TMP;j<SOSOS_MAX_TASK_PER_PRI;j++){
193:sosos.c **** if((SOSOS_TASK_READY[i]&SOSOS_RUNNING_TASK_ID_INDEX)!=0){
562 tabn 68,0,193,.LM70-SososSched
563 .LM70:
564 0206 8081 mov r10,r19
565 0208 8223 mov r12,r18
194:sosos.c **** SOSOS_RUNNING_TASK_ID=j;
195:sosos.c **** goto SososSchedEnd;
196:sosos.c **** }
197:sosos.c **** else
198:sosos.c **** SOSOS_RUNNING_TASK_ID_INDEX=SOSOS_RUNNING_TASK_ID_INDEX<<1;
567 :
568 mov r11,r25
569 020c 220F rjmp .L56
570 .L48:
572 020e 9F5F .LM72:
573 mov r10,r19
574 0210 9230 mov r12,r18
575 0212 00F0 .L56:
577 0214 4F5F .LM73:
578 0216 5F4F mov r6,r10
580 .LM74:
581 lds r26,SOSOS_MUTEX_POINT
582 021a 4330 lds r27,(SOSOS_MUTEX_POINT)+1
583 021c 5105 sbiw r26,0
584 021e 01F4 breq .L58
585 0220 00C0 ldi r28,lo8(1)
586 ldi r29,hi8(1)
587 .L59:
588 .LBB2:
590 0224 C22E .LM75:
591 movw r30,r26
592 ldd r22,Z+2
593 0226 B92E cp r10,r22
594 0228 00C0 brlo .L58
596 .LM76:
597 ldd r21,Z+3
598 022a A32E mov r30,r21
599 022c C22E clr r31
600 subi r30,lo8(-(SOSOS_TASK_READY))
199:sosos.c **** }
200:sosos.c **** }
201:sosos.c ****
202:sosos.c **** SososSchedEnd:
203:sosos.c **** #if SOSOS_MUTEX_ENABLE == 1
204:sosos.c **** SOSOS_RUNNING_INHERIT_PRI=SOSOS_RUNNING_TASK_PRI;
601
602 ld r24,Z
603 022e 6A2C clr r25
205:sosos.c **** if(SOSOS_MUTEX_POINT!=0){//互斥型信号量队列有成员
604 ovw r30,r26
605 ldd r20,Z+4
606 0230 A091 0000 mov r18,r20
607 0234 B091 0000 clr r19
608 0238 1097 mov r0,r18
609 023a 01F0 rjmp 2f
610 023c C1E0 1: asr r25
611 023e D0E0 ror r24
612 2: dec r0
613 brpl 1b
206:sosos.c **** SOSOS_MUTEX * mutex;
207:sosos.c ****
208:sosos.c **** mutex=SOSOS_MUTEX_POINT;
209:sosos.c **** while(mutex!=0){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -