📄 sosos.lst
字号:
210:sosos.c **** if((mutex->INHERIT_PRI)>SOSOS_RUNNING_TASK_PRI){
614 0
615 rjmp .L61
617 0242 6281 .LM77:
618 0244 A616 mov r6,r22
211:sosos.c **** break;
212:sosos.c **** }
213:sosos.c **** else{
214:sosos.c **** if(test_1(SOSOS_TASK_READY[mutex->OWN_TASK_PRI],mutex->OWN_TASK_ID)){
620
621 mov r10,r21
623 024a E52F .LM79:
624 024c FF27 mov r11,r20
626 0250 F040 .LM80:
627 0252 8081 movw r24,r28
628 0254 9927 rjmp 2f
629 0256 FD01 1: lsl r24
630 0258 4481 rol r25
631 025a 242F 2: dec r18
632 025c 3327 brpl 1b
633 025e 022E mov r12,r24
634 0260 00C0 .L61:
636 0264 8795 .LM81:
637 0266 0A94 ld r24,X+
638 0268 02F4 ld r25,X
640 026c 00C0 .LM82:
215:sosos.c **** SOSOS_RUNNING_INHERIT_PRI=mutex->INHERIT_PRI;
641 58
643 026e 662E .LM83:
216:sosos.c **** SOSOS_RUNNING_TASK_PRI=mutex->OWN_TASK_PRI;
644 vw r26,r24
645 rjmp .L59
646 0270 A52E .L58:
217:sosos.c **** SOSOS_RUNNING_TASK_ID=mutex->OWN_TASK_ID;
647 E2:
649 0272 B42E .LM84:
218:sosos.c **** SOSOS_RUNNING_TASK_ID_INDEX=1<<SOSOS_RUNNING_TASK_ID;
650 v r30,r10
651 clr r31
652 0274 CE01 lsl r30
653 0276 00C0 rol r31
654 0278 880F add r30,r11
655 027a 991F adc r31,__zero_reg__
656 027c 2A95 movw r24,r30
657 027e 02F4 ldi r22,3
658 0280 C82E 1: lsl r24
659 rol r25
219:sosos.c **** }
220:sosos.c **** }
221:sosos.c **** mutex=(SOSOS_MUTEX *)(mutex->NEXT_MUTEX);
660 brne 1b
661 lsl r30
662 0282 8D91 rol r31
663 0284 9C91 add r30,r24
664 adc r31,r25
665 subi r30,lo8(-(TCB))
666 0286 0097 sbci r31,hi8(-(TCB))
667 0288 01F0 ld r24,Z
668 ldd r25,Z+1
669 out (93)+1-0x20,r25
670 028a DC01 out 93-0x20,r24
672 .LM85:
673 /* #APP */
222:sosos.c **** }
223:sosos.c **** }//互斥型信号量队列有成员
224:sosos.c **** #endif
225:sosos.c **** SP=TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STACK_POINT;//切
674 OP R28
675
676 028e EA2D POP R31
677 0290 FF27
678 0292 EE0F POP R30
679 0294 FF1F
680 0296 EB0D POP R27
681 0298 F11D
682 029a CF01 POP R26
683 029c 63E0
684 029e 880F POP R25
685 02a0 991F
686 02a2 6A95 POP R24
687 02a4 01F4
688 02a6 EE0F POP R23
689 02a8 FF1F
690 02aa E80F POP R22
691 02ac F91F
692 02ae E050 POP R21
693 02b0 F040
694 02b2 8081 POP R20
695 02b4 9181
696 02b6 9EBF POP R19
697 02b8 8DBF
226:sosos.c **** //寄存器出栈
227:sosos.c **** SOSOS_POP_REGISTER();
698 OUT __SREG__,R16
699
700 POP R16
701 02ba DF91
702 POP __tmp_reg__
703 02bc CF91
704 POP __zero_reg__
705 02be FF91
707 02c0 EF91 .LM86:
708 RET
709 02c2 BF91
710 /* #NOAPP */
711 02c4 AF91 /* epilogue: frame size=0 */
712 /* epilogue: naked */
713 02c6 9F91 /* epilogue end (size=0) */
714 /* function SososSched size 227 (227) */
724 .Lscope4:
726 .global SososScheder
728 SososScheder:
730 .LM87:
731 02d8 0FBF /* prologue: frame size=0 */
732 /* prologue: naked */
733 02da 0F91 /* prologue end (size=0) */
735 02dc 0F90 .LM88:
736 /* #APP */
737 02de 1F90 PUSH __zero_reg__
738
228:sosos.c **** __asm__ __volatile__("RET \n\t");
739 ,__SREG__
740
741 02e0 0895 PUSH R16
742
743 EOR __zero_reg__,__zero_reg__
744
745 PUSH R18
746
747 PUSH R19
748
749 PUSH R20
750
751 PUSH R21
752
753 PUSH R22
754
755 PUSH R23
756
757 PUSH R24
758
759 PUSH R25
760
761 PUSH R26
229:sosos.c **** }
230:sosos.c **** #endif
231:sosos.c ****
232:sosos.c **** #if SOSOS_TASK_ENALBE == 1
233:sosos.c **** void SososScheder(void) __attribute__ ((naked));//任务调度器
234:sosos.c **** void SososScheder(void)//任务调度器
235:sosos.c **** //本函数只在系统内部使用,进入时中断是关闭的
236:sosos.c **** {
762 0
763
764 PUSH R31
765
766 PUSH R28
237:sosos.c **** //寄存器入栈
238:sosos.c **** SOSOS_PUSH_REGISTER();
767 SH R29
768
770 02e2 1F92 .LM89:
771 /* #NOAPP */
772 02e4 0F92 in r24,93-0x20
773 in r25,(93)+1-0x20
774 02e6 0F93 mov r30,r10
775 clr r31
776 02e8 0FB7 lsl r30
777 rol r31
778 02ea 0F93 add r30,r11
779 adc r31,__zero_reg__
780 02ec 1124 movw r18,r30
781 ldi r27,3
782 02ee 2F93 1: lsl r18
783 rol r19
784 02f0 3F93 dec r27
785 brne 1b
786 02f2 4F93 lsl r30
787 rol r31
788 02f4 5F93 add r30,r18
789 adc r31,r19
790 02f6 6F93 subi r30,lo8(-(TCB))
791 sbci r31,hi8(-(TCB))
792 02f8 7F93 std Z+1,r25
793 st Z,r24
795 .LM90:
796 02fc 9F93 rcall SososSched
797 /* epilogue: frame size=0 */
798 02fe AF93 /* epilogue: naked */
799 /* epilogue end (size=0) */
800 0300 BF93 /* function SososScheder size 103 (103) */
802 0302 EF93 .Lscope5:
804 0304 FF93 .global __vector_9
806 0306 CF93 __vector_9:
808 0308 DF93 .LM91:
809 /* prologue: frame size=0 */
239:sosos.c ****
240:sosos.c **** TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STACK_POINT=SP;//保
810 =0) */
812 .LM92:
813 030a 8DB7 /* #APP */
814 030c 9EB7 PUSH __zero_reg__
815 030e EA2D
816 0310 FF27 PUSH __tmp_reg__
817 0312 EE0F
818 0314 FF1F PUSH R16
819 0316 EB0D
820 0318 F11D IN R16,__SREG__
821 031a 9F01
822 031c B3E0 PUSH R16
823 031e 220F
824 0320 331F EOR __zero_reg__,__zero_reg__
825 0322 BA95
826 0324 01F4 PUSH R18
827 0326 EE0F
828 0328 FF1F PUSH R19
829 032a E20F
830 032c F31F PUSH R20
831 032e E050
832 0330 F040 PUSH R21
833 0332 9183
834 0334 8083 PUSH R22
241:sosos.c **** SososSched();
835
836
837 0336 00D0 PUSH R25
838
839 PUSH R26
840
841 PUSH R27
842
843 PUSH R30
844
845 PUSH R31
846
847 PUSH R28
242:sosos.c ****
243:sosos.c **** }
244:sosos.c **** #endif
245:sosos.c ****
246:sosos.c **** #if SOSOS_TASK_ENALBE == 1
247:sosos.c **** SOSOS_ISR(SIG_OVERFLOW0)//定时器0溢出中断处理
248:sosos.c **** //提供系统的时间基准,中间开了下中断,以允许响应其他中断
249:sosos.c **** {
848
849
850 /* #NOAPP */
851 tst r13
852 brne .L72
250:sosos.c **** //进入中断
251:sosos.c **** SOSOS_ENTER_INTERRUPT();
853 abn 68,0,251,.LM93-__vector_9
854 .LM93:
855 sbrc r17,1
856 0338 1F92 rjmp .L74
857 in r24,93-0x20
858 033a 0F92 in r25,(93)+1-0x20
859 mov r30,r10
860 033c 0F93 clr r31
861 lsl r30
862 033e 0FB7 rol r31
863 add r30,r11
864 0340 0F93 adc r31,__zero_reg__
865 movw r18,r30
866 0342 1124 lsl r18
867 rol r19
868 0344 2F93 lsl r18
869 rol r19
870 0346 3F93 lsl r18
871 rol r19
872 0348 4F93 lsl r30
873 rol r31
874 034a 5F93 add r30,r18
875 adc r31,r19
876 034c 6F93 subi r30,lo8(-(TCB))
877 sbci r31,hi8(-(TCB))
878 034e 7F93 std Z+1,r25
879 st Z,r24
880 0350 8F93 .L74:
881 /* #APP */
882 0352 9F93 IN r30 ,__SP_L__
883
884 0354 AF93 IN r31 ,__SP_H__
885
886 0356 BF93 OUT __SP_L__,r14
887
888 0358 EF93 OUT __SP_H__,r15
889
890 035a FF93 PUSH R30
891
892 035c CF93 PUSH R31
893
894 035e DF93 /* #NOAPP */
895 .L72:
896 inc r13
898 0362 01F4 .LM94:
899 ldi r24,lo8(-39)
900 out 82-0x20,r24
902 0366 00C0 .LM95:
903 0368 8DB7 inc r7
905 036c EA2D .LM96:
906 036e FF27 /* #APP */
907 0370 EE0F SEI
908 0372 FF1F
910 0376 F11D .LM97:
911 0378 9F01 /* #NOAPP */
912 037a 220F rcall SososTimer0
914 037e 220F .LM98:
915 0380 331F /* #APP */
916 0382 220F CLI
917 0384 331F
918 0386 EE0F /* #NOAPP */
919 0388 FF1F cpse r13,__zero_reg__
920 038a E20F dec r13
921 038c F31F .L76:
922 038e E050 tst r13
923 0390 F040 brne .L78
924 0392 9183 /* #APP */
925 0394 8083 POP R31
926
927 POP R30
928 0396 EDB7
929 OUT __SP_L__,r30
930 0398 FEB7
931 OUT __SP_H__,r31
932 039a EDBE
933 /* #NOAPP */
934 039c FEBE sbrs r17,0
935 rjmp .L78
936 039e EF93 sbrs r17,1
937 rcall SososSched
938 03a0 FF93 .L78:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -