📄 user_code.lst
字号:
692 03ec FC01 movw r30,r24
693 03ee E050 subi r30,lo8(-(OS_TASK_ARRY+4))
694 03f0 F040 sbci r31,hi8(-(OS_TASK_ARRY+4))
695 03f2 8081 ld r24,Z
696 03f4 9181 ldd r25,Z+1
697 03f6 9093 5E00 sts (93)+1,r25
698 03fa 8093 5D00 sts 93,r24
192:mxavr.c **** os_now_task=os_next_task; //修改当前线程标识
699 .stabn 68,0,192,.LM55-OS_GETTO_NEXT_TASK_DISP
700 .LM55:
701 03fe 8091 0000 lds r24,os_next_task
702 0402 8093 0000 sts os_now_task,r24
193:mxavr.c **** p=&OS_GET_TO_TASK_DISP; //获取汇编进入线程入口函数地址
703 .stabn 68,0,193,.LM56-OS_GETTO_NEXT_TASK_DISP
704 .LM56:
705 0406 80E0 ldi r24,lo8(pm(OS_GET_TO_TASK_DISP))
706 0408 90E0 ldi r25,hi8(pm(OS_GET_TO_TASK_DISP))
707 040a 8983 std Y+1,r24
708 040c 9A83 std Y+2,r25
194:mxavr.c **** goto *p; //进入汇编进入线程函数
709 .stabn 68,0,194,.LM57-OS_GETTO_NEXT_TASK_DISP
710 .LM57:
711 040e E981 ldd r30,Y+1
712 0410 FA81 ldd r31,Y+2
713 0412 0994 ijmp
195:mxavr.c **** }
714 .stabn 68,0,195,.LM58-OS_GETTO_NEXT_TASK_DISP
715 .LM58:
716 .LBE4:
717 /* epilogue: frame size=2 */
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccykaaaa.s page 17
718 /* epilogue: noreturn */
719 /* epilogue end (size=0) */
720 /* function OS_GETTO_NEXT_TASK_DISP size 39 (29) */
721 .size OS_GETTO_NEXT_TASK_DISP, .-OS_GETTO_NEXT_TASK_DISP
722 .stabs "p:(5,2)",128,0,190,1
723 .stabn 192,0,0,.LBB4-OS_GETTO_NEXT_TASK_DISP
724 .stabn 224,0,0,.LBE4-OS_GETTO_NEXT_TASK_DISP
725 .Lscope2:
726 .stabs "",36,0,0,.Lscope2-OS_GETTO_NEXT_TASK_DISP
727 .stabs "OS_SAVE_TASK_SP:F(0,20)",36,0,199,OS_SAVE_TASK_SP
728 .stabs "task_sp:p(0,4)",160,0,198,1
729 .global OS_SAVE_TASK_SP
730 .type OS_SAVE_TASK_SP, @function
731 OS_SAVE_TASK_SP:
196:mxavr.c ****
197:mxavr.c **** //保存线程SP指针
198:mxavr.c **** void OS_SAVE_TASK_SP(unsigned int task_sp)
199:mxavr.c **** {
732 .stabn 68,0,199,.LM59-OS_SAVE_TASK_SP
733 .LM59:
734 /* prologue: frame size=2 */
735 0414 CF93 push r28
736 0416 DF93 push r29
737 0418 CDB7 in r28,__SP_L__
738 041a DEB7 in r29,__SP_H__
739 041c 2297 sbiw r28,2
740 041e 0FB6 in __tmp_reg__,__SREG__
741 0420 F894 cli
742 0422 DEBF out __SP_H__,r29
743 0424 0FBE out __SREG__,__tmp_reg__
744 0426 CDBF out __SP_L__,r28
745 /* prologue end (size=10) */
746 0428 8983 std Y+1,r24
747 042a 9A83 std Y+2,r25
200:mxavr.c **** OS_TASK_ARRY[os_now_task].task_sp=task_sp; //保存当前线程的SP指针
748 .stabn 68,0,200,.LM60-OS_SAVE_TASK_SP
749 .LM60:
750 042c 8091 0000 lds r24,os_now_task
751 0430 9927 clr r25
752 0432 880F lsl r24
753 0434 991F rol r25
754 0436 880F lsl r24
755 0438 991F rol r25
756 043a 880F lsl r24
757 043c 991F rol r25
758 043e FC01 movw r30,r24
759 0440 E050 subi r30,lo8(-(OS_TASK_ARRY+4))
760 0442 F040 sbci r31,hi8(-(OS_TASK_ARRY+4))
761 0444 8981 ldd r24,Y+1
762 0446 9A81 ldd r25,Y+2
763 0448 8083 st Z,r24
764 044a 9183 std Z+1,r25
201:mxavr.c **** }
765 .stabn 68,0,201,.LM61-OS_SAVE_TASK_SP
766 .LM61:
767 /* epilogue: frame size=2 */
768 044c 2296 adiw r28,2
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccykaaaa.s page 18
769 044e 0FB6 in __tmp_reg__,__SREG__
770 0450 F894 cli
771 0452 DEBF out __SP_H__,r29
772 0454 0FBE out __SREG__,__tmp_reg__
773 0456 CDBF out __SP_L__,r28
774 0458 DF91 pop r29
775 045a CF91 pop r28
776 045c 0895 ret
777 /* epilogue end (size=9) */
778 /* function OS_SAVE_TASK_SP size 37 (18) */
779 .size OS_SAVE_TASK_SP, .-OS_SAVE_TASK_SP
780 .Lscope3:
781 .stabs "",36,0,0,.Lscope3-OS_SAVE_TASK_SP
782 .stabs "OS_ATTEMPER:F(0,20)",36,0,205,OS_ATTEMPER
783 .global OS_ATTEMPER
784 .type OS_ATTEMPER, @function
785 OS_ATTEMPER:
202:mxavr.c ****
203:mxavr.c **** //系统调度器
204:mxavr.c **** void OS_ATTEMPER(void)
205:mxavr.c **** {
786 .stabn 68,0,205,.LM62-OS_ATTEMPER
787 .LM62:
788 /* prologue: frame size=2 */
789 045e CF93 push r28
790 0460 DF93 push r29
791 0462 CDB7 in r28,__SP_L__
792 0464 DEB7 in r29,__SP_H__
793 0466 2297 sbiw r28,2
794 0468 0FB6 in __tmp_reg__,__SREG__
795 046a F894 cli
796 046c DEBF out __SP_H__,r29
797 046e 0FBE out __SREG__,__tmp_reg__
798 0470 CDBF out __SP_L__,r28
799 /* prologue end (size=10) */
206:mxavr.c **** unsigned char loop_task_arry; //求出下一条线程的循环变量
207:mxavr.c **** unsigned char task_high_pri=0xff; //求出最高优先权临时变量
800 .stabn 68,0,207,.LM63-OS_ATTEMPER
801 .LM63:
802 .LBB5:
803 0472 8FEF ldi r24,lo8(-1)
804 0474 8A83 std Y+2,r24
208:mxavr.c **** //为经检验 原来值为0XFF
209:mxavr.c **** os_next_task=TASK_NUMBER-1; //预设下一条线程为最后ID线程
805 .stabn 68,0,209,.LM64-OS_ATTEMPER
806 .LM64:
807 0476 83E0 ldi r24,lo8(3)
808 0478 8093 0000 sts os_next_task,r24
210:mxavr.c ****
211:mxavr.c **** for (loop_task_arry=0;loop_task_arry<TASK_NUMBER;loop_task_arry++)
809 .stabn 68,0,211,.LM65-OS_ATTEMPER
810 .LM65:
811 047c 1982 std Y+1,__zero_reg__
812 .L8:
813 047e 8981 ldd r24,Y+1
814 0480 8430 cpi r24,lo8(4)
815 0482 08F0 brlo .L11
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccykaaaa.s page 19
816 0484 3FC0 rjmp .L7
817 .L11:
212:mxavr.c **** {
213:mxavr.c **** if( (OS_TASK_ARRY[loop_task_arry].task_ready==1)&&
818 .stabn 68,0,213,.LM66-OS_ATTEMPER
819 .LM66:
820 0486 8981 ldd r24,Y+1
821 0488 9927 clr r25
822 048a 880F lsl r24
823 048c 991F rol r25
824 048e 880F lsl r24
825 0490 991F rol r25
826 0492 880F lsl r24
827 0494 991F rol r25
828 0496 FC01 movw r30,r24
829 0498 E050 subi r30,lo8(-(OS_TASK_ARRY+3))
830 049a F040 sbci r31,hi8(-(OS_TASK_ARRY+3))
831 049c 8081 ld r24,Z
832 049e 8130 cpi r24,lo8(1)
833 04a0 69F5 brne .L10
834 04a2 8981 ldd r24,Y+1
835 04a4 9927 clr r25
836 04a6 880F lsl r24
837 04a8 991F rol r25
838 04aa 880F lsl r24
839 04ac 991F rol r25
840 04ae 880F lsl r24
841 04b0 991F rol r25
842 04b2 FC01 movw r30,r24
843 04b4 E050 subi r30,lo8(-(OS_TASK_ARRY+6))
844 04b6 F040 sbci r31,hi8(-(OS_TASK_ARRY+6))
845 04b8 8081 ld r24,Z
846 04ba 8823 tst r24
847 04bc F9F4 brne .L10
214:mxavr.c **** (OS_TASK_ARRY[loop_task_arry].task_wait_clock==0))
215:mxavr.c **** {
216:mxavr.c **** if (OS_TASK_ARRY[loop_task_arry].task_pri<task_high_pri)
848 .stabn 68,0,216,.LM67-OS_ATTEMPER
849 .LM67:
850 04be 8981 ldd r24,Y+1
851 04c0 9927 clr r25
852 04c2 880F lsl r24
853 04c4 991F rol r25
854 04c6 880F lsl r24
855 04c8 991F rol r25
856 04ca 880F lsl r24
857 04cc 991F rol r25
858 04ce FC01 movw r30,r24
859 04d0 E050 subi r30,lo8(-(OS_TASK_ARRY+2))
860 04d2 F040 sbci r31,hi8(-(OS_TASK_ARRY+2))
861 04d4 9081 ld r25,Z
862 04d6 8A81 ldd r24,Y+2
863 04d8 9817 cp r25,r24
864 04da 80F4 brsh .L10
217:mxavr.c **** {
218:mxavr.c **** task_high_pri=OS_TASK_ARRY[loop_task_arry].task_pri;
865 .stabn 68,0,218,.LM68-OS_ATTEMPER
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccykaaaa.s page 20
866 .LM68:
867 04dc 8981 ldd r24,Y+1
868 04de 9927 clr r25
869 04e0 880F lsl r24
870 04e2 991F rol r25
871 04e4 880F lsl r24
872 04e6 991F rol r25
873 04e8 880F lsl r24
874 04ea 991F rol r25
875 04ec FC01 movw r30,r24
876 04ee E050 subi r30,lo8(-(OS_TASK_ARRY+2))
877 04f0 F040 sbci r31,hi8(-(OS_TASK_ARRY+2))
878 04f2 8081 ld r24,Z
879 04f4 8A83 std Y+2,r24
219:mxavr.c **** os_next_task=loop_task_arry;
880 .stabn 68,0,219,.LM69-OS_ATTEMPER
881 .LM69:
882 04f6 8981 ldd r24,Y+1
883 04f8 8093 0000 sts os_next_task,r24
884 .stabn 68,0,211,.LM70-OS_ATTEMPER
885 .LM70:
886 .L10:
887 04fc 8981 ldd r24,Y+1
888 04fe 8F5F subi r24,lo8(-(1))
889 0500 8983 std Y+1,r24
890 0502 BDCF rjmp .L8
220:mxavr.c **** }
221:mxavr.c **** }
222:mxavr.c **** }
223:mxavr.c **** }
891 .stabn 68,0,223,.LM71-OS_ATTEMPER
892 .LM71:
893 .L7:
894 .LBE5:
895 /* epilogue: frame size=2 */
896 0504 2296 adiw r28,2
897 0506 0FB6 in __tmp_reg__,__SREG__
898 0508 F894 cli
899 050a DEBF out __SP_H__,r29
900 050c 0FBE out __SREG__,__tmp_reg__
901 050e CDBF out __SP_L__,r28
902 0510 DF91 pop r29
903 0512 CF91 pop r28
904 0514 0895 ret
905 /* epilogue end (size=9) */
906 /* function OS_ATTEMPER size 92 (73) */
907 .size OS_ATTEMPER, .-OS_ATTEMPER
908 .stabs "loop_task_arry:(0,11)",128,0,206,1
909 .stabs "task_high_pri:(0,11)",128,0,207,2
910 .stabn 192,0,0,.LBB5-OS_ATTEMPER
911 .stabn 224,0,0,.LBE5-OS_ATTEMPER
912 .Lscope4:
913 .stabs "",36,0,0,.Lscope4-OS_ATTEMPER
914 .stabs "OS_DLY_TIME_DEC:F(0,20)",36,0,227,OS_DLY_TIME_DEC
915 .global OS_DLY_TIME_DEC
916 .type OS_DLY_TIME_DEC, @function
917 OS_DLY_TIME_DEC:
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccykaaaa.s page 21
224:mxavr.c ****
225:mxavr.c **** //线程等待时钟节拍处理过程
226:mxavr.c **** void OS_DLY_TIME_DEC(void)
227:mxavr.c **** {
918 .stabn 68,0,227,.LM72-OS_DLY_TIME_DEC
919 .LM72:
920 /* prologue: frame size=1 */
921 0516 CF93 push r28
922 0518 DF93 push r29
923 051a CDB7 in r28,__SP_L__
924 051c DEB7 in r29,__SP_H__
925 051e 2197 sbiw r28,1
926 0520 0FB6 in __tmp_reg__,__SREG__
927 0522 F894 cli
928 0524 DEBF out __SP_H__,r29
929 0526 0FBE out __SREG__,__tmp_reg__
930 0528 CDBF out __SP_L__,r28
931 /* prologue end (size=10) */
228:mxavr.c **** unsigned char loop_i;
229:mxavr.c **** for (loop_i=0;loop_i<TASK_NUMBER;loop_i++)
932 .stabn 68,0,229,.LM73-OS_DLY_TIME_DEC
933 .LM73:
934 .LBB6:
935 052a 1982 std Y+1,__zero_reg__
936 .L15:
937 052c 8981 ldd r24,Y+1
938 052e 8430 cpi r24,lo8(4)
939 0530 08F0 brlo .L18
940 0532 2BC0 rjmp .L14
941 .L18:
230:mxavr.c **** {
231:mxavr.c **** if (OS_TASK_ARRY[loop_i].task_wait_clock!=0)
942 .stabn 68,0,231,.LM74-OS_DLY_TIME_DEC
943 .LM74:
944 0534 8981 ldd r24,Y+1
945 0536 9927 clr r25
946 0538 880F lsl r24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -