⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_sem.ls1

📁 AT89C55WD上移植的ucos-ii, 非常有用, 串口观看输出与调试。
💻 LS1
📖 第 1 页 / 共 5 页
字号:
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 + -