?? rtx51tny.lst
字號:
024B 661 no_wait:
662 ; STATE[current].st &= ~ (st | K_SIG | K_TMO);
663 ; return (st);
024B EE 664 MOV A,R6
024C FF 665 MOV R7,A
024D 4403 666 ORL A,#K_SIG + K_TMO
024F F4 667 CPL A
0250 C2AF 668 CLR EA
0252 56 669 ANL A,@R0
0253 F6 670 MOV @R0,A
0254 D2AF 671 SETB EA
0256 D2A9 672 SETB ET0
0258 22 673 RET
674 ; }
675
676
677
0259 678 _OS_send_signal:
0259 679 _isr_send_signal:
680 ; os_send_signal (uchar taskid) {
681 ; uchar data *p;
682 ;---- Variable 'taskid' assigned to Register 'R7' ----
683 ;---- Variable 'p' assigned to Register 'R0' ----
684 ; if (no > MAXTASKN) return (0xff);
0259 EF 685 MOV A,R7
025A D3 686 SETB C
025B 9400 F 687 SUBB A,#?RTX_MAXTASKN
025D 4003 688 JC ??C0010
025F 7FFF 689 MOV R7,#0FFH
0261 22 690 RET
0262 691 ??C0010:
692
693 ; p = &STATE[taskid].st;
0262 EF 694 MOV A,R7
0263 23 695 RL A
0264 2400 F 696 ADD A,#?RTX?TASKSTATE?S+1
0266 F8 697 MOV R0,A
0267 C2AF 698 CLR EA
0269 E6 699 MOV A,@R0
700 ;
701 ; if (*p & K_ACTIVE) {
026A 30E505 702 JNB ACC.B_ACTIVE,?C0026
703 ; if (*p & K_SIG) *p |= K_READY;
026D 30E002 704 JNB ACC.B_WAITSIG,?C0026
0270 D2E4 705 SETB ACC.B_READY
706 ; }
0272 707 ?C0026:
708 ; *p |= SIG_EVENT;
0272 D2E2 709 SETB ACC.B_SIGNAL
0274 C6 710 XCH A,@R0
0275 D2AF 711 SETB EA
0277 20E203 712 JB ACC.B_SIGNAL,SIG_PENDING
027A 7F00 713 MOV R7,#0
027C 22 714 RET
715
027D 7F01 716 SIG_PENDING: MOV R7,#1
027F 22 717 RET
A51 MACRO ASSEMBLER RTX51TNY 04/22/2006 15:06:57 PAGE 12
718 ; }
719
0280 720 _OS_clear_signal:
721 ; os_clear_signal (uchar taskid) {
722 ; uchar data *p;
723 ;---- Variable 'taskid' assigned to Register 'R7' ----
724 ;---- Variable 'p' assigned to Register 'R0' ----
725 ; if (no > MAXTASKN) return (0xff);
0280 EF 726 MOV A,R7
0281 D3 727 SETB C
0282 9400 F 728 SUBB A,#?RTX_MAXTASKN
0284 4003 729 JC _??C0010
0286 7FFF 730 MOV R7,#0FFH
0288 22 731 RET
0289 732 _??C0010:
733
734 ; p = &STATE[taskid].st;
0289 EF 735 MOV A,R7
028A 23 736 RL A
028B 2400 F 737 ADD A,#?RTX?TASKSTATE?S+1
028D F8 738 MOV R0,A
028E C2AF 739 CLR EA
0290 E6 740 MOV A,@R0
741 ; *p &= SIG_EVENT;
0291 C2E2 742 CLR ACC.B_SIGNAL
0293 C6 743 XCH A,@R0
0294 D2AF 744 SETB EA
0296 20E203 745 JB ACC.B_SIGNAL,_SIG_PENDING
0299 7F00 746 MOV R7,#0
029B 22 747 RET
748
029C 7F01 749 _SIG_PENDING: MOV R7,#1
029E 22 750 RET
751 ; }
752
753 ; uchar os_delete (uchar no) {
754 ; uchar i;
755 ; uchar last, first, check;
756 ;
029F 757 _OS_delete_task:
758 ;---- Variable 'first' assigned to Register 'R1' ----
759 ;---- Variable 'last' assigned to Register 'R5' ----
760 ;---- Variable 'check' assigned to Register 'R4' ----
761 ;---- Variable 'no' assigned to Register 'R7' ----
762 ; if (no > MAXTASKN) return (0xff);
029F EF 763 MOV A,R7
02A0 D3 764 SETB C
02A1 9400 F 765 SUBB A,#?RTX_MAXTASKN
02A3 4003 766 JC ?C0030
02A5 7FFF 767 ?C0032: MOV R7,#0FFH
02A7 22 768 RET
02A8 769 ?C0030:
770 ; if (!(STATE[no].st & K_ACTIVE)) return (0xff);
771
02A8 EF 772 MOV A,R7
02A9 23 773 RL A
02AA 2400 F 774 ADD A,#?RTX_TASKSTATUS+1
02AC F8 775 MOV R0,A
02AD E6 776 MOV A,@R0
02AE 30E5F4 777 JNB ACC.B_ACTIVE,?C0032
778 ; STATE[no].st &= ~(K_ACTIVE | K_READY | K_SIG | K_TMO | K_ROBIN);
02B1 C2AF 779 CLR EA
02B3 E6 780 MOV A,@R0
02B4 548C 781 ANL A,#NOT (K_ACTIVE+K_READY+K_SIG+K_TMO+K_ROBIN)
02B6 F6 782 MOV @R0,A
02B7 D2AF 783 SETB EA
A51 MACRO ASSEMBLER RTX51TNY 04/22/2006 15:06:57 PAGE 13
784 ; if (current == no) {
02B9 E500 F 785 MOV A,?RTX_CURRENTTASK
02BB B5070A 786 CJNE A,AR7,?C0033
787 ; SP = STKP[no];
02BE 7400 F 788 MOV A,#?RTX_TASKSP
02C0 2F 789 ADD A,R7
02C1 F8 790 MOV R0,A
02C2 E6 791 MOV A,@R0
02C3 F581 792 MOV SP,A
793 ; switchnow ();
02C5 020000 F 794 LJMP switchnow
795 ; }
796
02C8 797 ?C0033:
798 ; if (current < no) {
02C8 502E 799 JNC ?C0034
800 ; last = (no == MAXTASKN) ? STACKTOP : STKP[no+1];
02CA 7400 F 801 MOV A,#?RTX_TASKSP+1
02CC 2F 802 ADD A,R7
02CD F8 803 MOV R0,A
02CE E6 804 MOV A,@R0
02CF BF0002 F 805 CJNE R7,#?RTX_MAXTASKN,?C0035
02D2 7400 F 806 MOV A,#?RTX_RAMTOP
02D4 807 ?C0035:
02D4 FD 808 MOV R5,A
809 ; first = STKP[no];
02D5 18 810 DEC R0
02D6 E6 811 MOV A,@R0
02D7 F9 812 MOV R1,A
02D8 813 ?C0039:
814 ; do {
815 ; check = STKP[no];
02D8 7400 F 816 MOV A,#?RTX_TASKSP
02DA 2F 817 ADD A,R7
02DB F8 818 MOV R0,A
02DC FB 819 MOV R3,A ; save @STKP
02DD E6 820 MOV A,@R0
02DE FC 821 MOV R4,A
822 ; while (first != check) {
02DF 823 ?C0040:
02DF E9 824 MOV A,R1
02E0 6C 825 XRL A,R4
02E1 6008 826 JZ ?C0037
827 ; DBYTE[last] = DBYTE[first];
828 ; SOURCE LINE # 186
02E3 A805 829 MOV R0,AR5
02E5 E7 830 MOV A,@R1
02E6 F6 831 MOV @R0,A
832 ; last--;
02E7 1D 833 DEC R5
834 ; first--;
02E8 19 835 DEC R1
836 ; }
02E9 80F4 837 SJMP ?C0040
02EB 838 ?C0037:
839 ; STKP[no] = last;
02EB A803 840 MOV R0,AR3 ; restore @STKP
02ED A605 841 MOV @R0,AR5
842 ; no--;
02EF 1F 843 DEC R7
844 ; } while (current != no);
02F0 E500 F 845 MOV A,?RTX_CURRENTTASK
02F2 B507E3 846 CJNE A,AR7,?C0039
847 ; return (0);
02F5 7F00 848 MOV R7,#0
02F7 22 849 RET
A51 MACRO ASSEMBLER RTX51TNY 04/22/2006 15:06:57 PAGE 14
850 ; }
02F8 851 ?C0034:
852 ; if (current > no) {
853 ; last = STKP[no+1];
02F8 7400 F 854 MOV A,#?RTX_TASKSP+1
02FA 2F 855 ADD A,R7
02FB F8 856 MOV R0,A
02FC E6 857 MOV A,@R0
02FD FD 858 MOV R5,A
859 ; first = STKP[no];
02FE 18 860 DEC R0
02FF 8601 861 MOV AR1,@R0
0301 862 ?C0045:
863 ; do {
864 ; no++;
0301 0F 865 INC R7
866 ; STKP[no] = first;
0302 7400 F 867 MOV A,#?RTX_TASKSP
0304 2F 868 ADD A,R7
0305 F8 869 MOV R0,A
0306 A601 870 MOV @R0,AR1
871 ; check = (no == current) ? SP : STKP[no+1];
0308 08 872 INC R0
0309 8604 873 MOV AR4,@R0
030B E500 F 874 MOV A,?RTX_CURRENTTASK
030D B50702 875 CJNE A,AR7,?C0046
0310 AC81 876 MOV R4,SP
0312 877 ?C0046:
878 ; while (last != check) {
0312 ED 879 MOV A,R5
0313 6C 880 XRL A,R4
0314 6008 881 JZ ?C0043
882 ; last++;
0316 0D 883 INC R5
884 ; first++;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -