📄 os_sem.ls1
字号:
001B 400E 525 JC ?C0005
526 ; *err = OS_ERR_PEND_ISR; /* ... can't PEND from an ISR
*/
527 ; SOURCE LINE # 252
001D 900005 528 MOV DPTR,#05H
0020 120000 F 529 LCALL ?C?XBPOFF
0023 120000 F 530 LCALL ?C?PLDXDATA
0026 7402 531 MOV A,#02H
0028 020000 F 532 LJMP ?C0024
533 ; return;
534 ; }
535 ; SOURCE LINE # 254
002B 536 ?C0005:
537 ; #if OS_ARG_CHK_EN > 0
538 ; if (pevent == (OS_EVENT *)0) { /* Validate 'pevent'
*/
539 ; SOURCE LINE # 256
002B 850083 F 540 MOV DPH,?C_XBP
002E 850082 F 541 MOV DPL,?C_XBP+01H
0031 120000 F 542 LCALL ?C?PLDXDATA
0034 E9 543 MOV A,R1
0035 4A 544 ORL A,R2
0036 4B 545 ORL A,R3
0037 700E 546 JNZ ?C0007
547 ; *err = OS_ERR_PEVENT_NULL;
548 ; SOURCE LINE # 257
0039 900005 549 MOV DPTR,#05H
003C 120000 F 550 LCALL ?C?XBPOFF
003F 120000 F 551 LCALL ?C?PLDXDATA
0042 7404 552 MOV A,#04H
0044 553 ?C0020:
0044 020000 F 554 LJMP ?C0024
555 ; return;
556 ; }
557 ; SOURCE LINE # 259
0047 558 ?C0007:
559 ; if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type
*/
560 ; SOURCE LINE # 260
0047 850083 F 561 MOV DPH,?C_XBP
004A 850082 F 562 MOV DPL,?C_XBP+01H
004D 120000 F 563 LCALL ?C?PLDXDATA
0050 120000 F 564 LCALL ?C?CLDPTR
0053 6403 565 XRL A,#03H
0055 600E 566 JZ ?C0008
567 ; *err = OS_ERR_EVENT_TYPE;
A51 MACRO ASSEMBLER OS_SEM 05/17/2005 11:19:57 PAGE 11
568 ; SOURCE LINE # 261
0057 900005 569 MOV DPTR,#05H
005A 120000 F 570 LCALL ?C?XBPOFF
005D 120000 F 571 LCALL ?C?PLDXDATA
0060 7401 572 MOV A,#01H
0062 573 ?C0021:
0062 020000 F 574 LJMP ?C0024
575 ; return;
576 ; }
577 ; SOURCE LINE # 263
0065 578 ?C0008:
579 ; #endif
580 ; OS_ENTER_CRITICAL();
581 ; SOURCE LINE # 265
0065 C2AF 582 CLR EA
583 ; if (pevent->OSEventCnt > 0) { /* If sem. is positive, resource av
ailable ... */
584 ; SOURCE LINE # 266
0067 850083 F 585 MOV DPH,?C_XBP
006A 850082 F 586 MOV DPL,?C_XBP+01H
006D 120000 F 587 LCALL ?C?PLDXDATA
0070 900002 588 MOV DPTR,#02H
0073 120000 F 589 LCALL ?C?ILDOPTR
0076 D3 590 SETB C
0077 9400 591 SUBB A,#00H
0079 E5F0 592 MOV A,B
007B 9400 593 SUBB A,#00H
007D 4019 594 JC ?C0009
595 ; pevent->OSEventCnt--; /* ... decrement semaphore only if
positive. */
596 ; SOURCE LINE # 267
007F 900002 597 MOV DPTR,#02H
0082 74FF 598 MOV A,#0FFH
0084 F5F0 599 MOV B,A
0086 120000 F 600 LCALL ?C?IILDOPTR
601 ; OS_EXIT_CRITICAL();
602 ; SOURCE LINE # 268
0089 D2AF 603 SETB EA
604 ; *err = OS_NO_ERR;
605 ; SOURCE LINE # 269
008B 900005 606 MOV DPTR,#05H
008E 120000 F 607 LCALL ?C?XBPOFF
0091 120000 F 608 LCALL ?C?PLDXDATA
0094 E4 609 CLR A
0095 610 ?C0022:
0095 020000 F 611 LJMP ?C0024
612 ; return;
613 ; }
614 ; SOURCE LINE # 271
0098 615 ?C0009:
616 ; /* Otherwise, must wait until event
occurs */
617 ; OSTCBCur->OSTCBStat |= OS_STAT_SEM; /* Resource not available, pend on
semaphore */
618 ; SOURCE LINE # 273
0098 900000 F 619 MOV DPTR,#OSTCBCur
009B 120000 F 620 LCALL ?C?PLDXDATA
009E E9 621 MOV A,R1
009F 240E 622 ADD A,#0EH
00A1 F9 623 MOV R1,A
00A2 E4 624 CLR A
00A3 3A 625 ADDC A,R2
00A4 FA 626 MOV R2,A
00A5 120000 F 627 LCALL ?C?CLDPTR
00A8 4401 628 ORL A,#01H
00AA 120000 F 629 LCALL ?C?CSTPTR
A51 MACRO ASSEMBLER OS_SEM 05/17/2005 11:19:57 PAGE 12
630 ; OSTCBCur->OSTCBDly = timeout; /* Store pend timeout in TCB
*/
631 ; SOURCE LINE # 274
00AD 900003 632 MOV DPTR,#03H
00B0 120000 F 633 LCALL ?C?XBPOFF
00B3 E0 634 MOVX A,@DPTR
00B4 FE 635 MOV R6,A
00B5 A3 636 INC DPTR
00B6 E0 637 MOVX A,@DPTR
00B7 FF 638 MOV R7,A
00B8 900000 F 639 MOV DPTR,#OSTCBCur
00BB 120000 F 640 LCALL ?C?PLDXDATA
00BE 90000C 641 MOV DPTR,#0CH
00C1 EE 642 MOV A,R6
00C2 8FF0 643 MOV B,R7
00C4 120000 F 644 LCALL ?C?ISTOPTR
645 ; OS_EventTaskWait(pevent); /* Suspend task until event or time
out occurs */
646 ; SOURCE LINE # 275
00C7 850083 F 647 MOV DPH,?C_XBP
00CA 850082 F 648 MOV DPL,?C_XBP+01H
00CD 120000 F 649 LCALL ?C?PLDXDATA
00D0 120000 F 650 LCALL _?OS_EventTaskWait
651 ; OS_EXIT_CRITICAL();
652 ; SOURCE LINE # 276
00D3 D2AF 653 SETB EA
654 ; OS_Sched(); /* Find next highest priority task
ready */
655 ; SOURCE LINE # 277
00D5 120000 F 656 LCALL _?OS_Sched
657 ; OS_ENTER_CRITICAL();
658 ; SOURCE LINE # 278
00D8 C2AF 659 CLR EA
660 ; if (OSTCBCur->OSTCBStat & OS_STAT_SEM) { /* Must have timed out if still wai
ting for event*/
661 ; SOURCE LINE # 279
00DA 900000 F 662 MOV DPTR,#OSTCBCur
00DD 120000 F 663 LCALL ?C?PLDXDATA
00E0 90000E 664 MOV DPTR,#0EH
00E3 120000 F 665 LCALL ?C?CLDOPTR
00E6 30E01B 666 JNB ACC.0,?C0010
667 ; OS_EventTO(pevent);
668 ; SOURCE LINE # 280
00E9 850083 F 669 MOV DPH,?C_XBP
00EC 850082 F 670 MOV DPL,?C_XBP+01H
00EF 120000 F 671 LCALL ?C?PLDXDATA
00F2 120000 F 672 LCALL _?OS_EventTO
673 ; OS_EXIT_CRITICAL();
674 ; SOURCE LINE # 281
00F5 D2AF 675 SETB EA
676 ; *err = OS_TIMEOUT; /* Indicate that didn't get event w
ithin TO */
677 ; SOURCE LINE # 282
00F7 900005 678 MOV DPTR,#05H
00FA 120000 F 679 LCALL ?C?XBPOFF
00FD 120000 F 680 LCALL ?C?PLDXDATA
0100 740A 681 MOV A,#0AH
0102 682 ?C0023:
0102 8024 683 SJMP ?C0024
684 ; return;
685 ; }
686 ; SOURCE LINE # 284
0104 687 ?C0010:
688 ; OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;
689 ; SOURCE LINE # 285
0104 7B00 690 MOV R3,#00H
A51 MACRO ASSEMBLER OS_SEM 05/17/2005 11:19:57 PAGE 13
0106 7A00 691 MOV R2,#00H
0108 7900 692 MOV R1,#00H
010A C003 693 PUSH AR3
010C C002 694 PUSH AR2
010E C001 695 PUSH AR1
0110 900000 F 696 MOV DPTR,#OSTCBCur
0113 120000 F 697 LCALL ?C?PLDXDATA
0116 900009 698 MOV DPTR,#09H
0119 120000 F 699 LCALL ?C?PSTOPTR
700 ; OS_EXIT_CRITICAL();
701 ; SOURCE LINE # 286
011C D2AF 702 SETB EA
703 ; *err = OS_NO_ERR;
704 ; SOURCE LINE # 287
011E 900005 705 MOV DPTR,#05H
0121 120000 F 706 LCALL ?C?XBPOFF
0124 120000 F 707 LCALL ?C?PLDXDATA
0127 E4 708 CLR A
0128 709 ?C0024:
0128 120000 F 710 LCALL ?C?CSTPTR
711 ; }
712 ; SOURCE LINE # 288
012B 713 ?C0006:
012B 900008 714 MOV DPTR,#08H
012E 020000 F 715 LJMP ?C?ADDXBP
716 ; END OF _?OSSemPend
717
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -