os_mbox.txt

来自「uc/os在lpc2100系列的KEIL模板 uc/os在lpc2100系列的」· 文本 代码 · 共 681 行 · 第 1/3 页

TXT
681
字号
000344  e3500000          CMP      r0,#0                 ;329
000348  0a000007          BEQ      |L1.876|
00034c  e3a02002          MOV      r2,#2                 ;330
000350  e1a01005          MOV      r1,r5                 ;330
000354  e1a00004          MOV      r0,r4                 ;330
000358  ebfffffe          BL       OS_EventTaskRdy
00035c  ef000003          SVC      #0x3                  ;331
000360  ebfffffe          BL       OS_Sched
000364  e3a00000          MOV      r0,#0                 ;333
000368  eaffffe8          B        |L1.784|
                  |L1.876|
00036c  e5940004          LDR      r0,[r4,#4]            ;335
000370  e3500000          CMP      r0,#0                 ;335
000374  0a000002          BEQ      |L1.900|
000378  ef000003          SVC      #0x3                  ;336
00037c  e3a00014          MOV      r0,#0x14              ;337
000380  eaffffe2          B        |L1.784|
                  |L1.900|
000384  e5845004          STR      r5,[r4,#4]            ;339
000388  ef000003          SVC      #0x3                  ;340
00038c  e3a00000          MOV      r0,#0                 ;341
000390  eaffffde          B        |L1.784|
;;;343    #endif
                          ENDP

                  OSMboxPostOpt PROC
;;;375    INT8U  OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)
;;;376    {
000394  e92d4070          PUSH     {r4-r6,lr}
000398  e1a04000          MOV      r4,r0
00039c  e1a05001          MOV      r5,r1
0003a0  e1a06002          MOV      r6,r2
;;;377    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;378        OS_CPU_SR  cpu_sr;
;;;379    #endif    
;;;380        
;;;381        
;;;382    #if OS_ARG_CHK_EN > 0
;;;383        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
0003a4  e3540000          CMP      r4,#0
0003a8  1a000002          BNE      |L1.952|
;;;384            return (OS_ERR_PEVENT_NULL);
0003ac  e3a00004          MOV      r0,#4
                  |L1.944|
0003b0  e8bd4070          POP      {r4-r6,lr}
;;;385        }
;;;386        if (msg == (void *)0) {                           /* Make sure we are not posting a NULL pointer   */
;;;387            return (OS_ERR_POST_NULL_PTR);
;;;388        }
;;;389        if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {  /* Validate event block type                     */
;;;390            return (OS_ERR_EVENT_TYPE);
;;;391        }
;;;392    #endif
;;;393        OS_ENTER_CRITICAL();
;;;394        if (pevent->OSEventGrp != 0x00) {                 /* See if any task pending on mailbox            */
;;;395            if ((opt & OS_POST_OPT_BROADCAST) != 0x00) {  /* Do we need to post msg to ALL waiting tasks ? */
;;;396                while (pevent->OSEventGrp != 0x00) {      /* Yes, Post to ALL tasks waiting on mailbox     */           
;;;397                    OS_EventTaskRdy(pevent, msg, OS_STAT_MBOX);    
;;;398                }
;;;399            } else {
;;;400                OS_EventTaskRdy(pevent, msg, OS_STAT_MBOX);    /* No,  Post to HPT waiting on mbox         */
;;;401            }
;;;402            OS_EXIT_CRITICAL();
;;;403            OS_Sched();                                        /* Find highest priority task ready to run  */
;;;404            return (OS_NO_ERR);
;;;405        }
;;;406        if (pevent->OSEventPtr != (void *)0) {            /* Make sure mailbox doesn't already have a msg  */
;;;407            OS_EXIT_CRITICAL();
;;;408            return (OS_MBOX_FULL);
;;;409        }
;;;410        pevent->OSEventPtr = msg;                         /* Place message in mailbox                      */
;;;411        OS_EXIT_CRITICAL();
;;;412        return (OS_NO_ERR);
;;;413    }
0003b4  e12fff1e          BX       lr
                  |L1.952|
0003b8  e3550000          CMP      r5,#0                 ;386
0003bc  1a000001          BNE      |L1.968|
0003c0  e3a00003          MOV      r0,#3                 ;387
0003c4  eafffff9          B        |L1.944|
                  |L1.968|
0003c8  e5d40000          LDRB     r0,[r4,#0]            ;389
0003cc  e3500001          CMP      r0,#1                 ;389
0003d0  0a000001          BEQ      |L1.988|
0003d4  e3a00001          MOV      r0,#1                 ;390
0003d8  eafffff4          B        |L1.944|
                  |L1.988|
0003dc  ef000002          SVC      #0x2                  ;393
0003e0  e5d40001          LDRB     r0,[r4,#1]            ;394
0003e4  e3500000          CMP      r0,#0                 ;394
0003e8  0a000012          BEQ      |L1.1080|
0003ec  e3160001          TST      r6,#1                 ;395
0003f0  0a000008          BEQ      |L1.1048|
0003f4  ea000003          B        |L1.1032|
                  |L1.1016|
0003f8  e3a02002          MOV      r2,#2                 ;397
0003fc  e1a01005          MOV      r1,r5                 ;397
000400  e1a00004          MOV      r0,r4                 ;397
000404  ebfffffe          BL       OS_EventTaskRdy
                  |L1.1032|
000408  e5d40001          LDRB     r0,[r4,#1]            ;396
00040c  e3500000          CMP      r0,#0                 ;396
000410  1afffff8          BNE      |L1.1016|
000414  ea000003          B        |L1.1064|
                  |L1.1048|
000418  e3a02002          MOV      r2,#2                 ;400
00041c  e1a01005          MOV      r1,r5                 ;400
000420  e1a00004          MOV      r0,r4                 ;400
000424  ebfffffe          BL       OS_EventTaskRdy
                  |L1.1064|
000428  ef000003          SVC      #0x3                  ;402
00042c  ebfffffe          BL       OS_Sched
000430  e3a00000          MOV      r0,#0                 ;404
000434  eaffffdd          B        |L1.944|
                  |L1.1080|
000438  e5940004          LDR      r0,[r4,#4]            ;406
00043c  e3500000          CMP      r0,#0                 ;406
000440  0a000002          BEQ      |L1.1104|
000444  ef000003          SVC      #0x3                  ;407
000448  e3a00014          MOV      r0,#0x14              ;408
00044c  eaffffd7          B        |L1.944|
                  |L1.1104|
000450  e5845004          STR      r5,[r4,#4]            ;410
000454  ef000003          SVC      #0x3                  ;411
000458  e3a00000          MOV      r0,#0                 ;412
00045c  eaffffd3          B        |L1.944|
;;;414    #endif
                          ENDP

                  OSMboxQuery PROC
;;;435    INT8U  OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *pdata)
;;;436    {
000460  e92d4070          PUSH     {r4-r6,lr}
000464  e1a04000          MOV      r4,r0
000468  e1a05001          MOV      r5,r1
;;;437    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;438        OS_CPU_SR  cpu_sr;
;;;439    #endif    
;;;440        INT8U     *psrc;
;;;441        INT8U     *pdest;
;;;442    
;;;443    
;;;444    #if OS_ARG_CHK_EN > 0
;;;445        if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                        */
00046c  e3540000          CMP      r4,#0
000470  1a000002          BNE      |L1.1152|
;;;446            return (OS_ERR_PEVENT_NULL);
000474  e3a00004          MOV      r0,#4
                  |L1.1144|
000478  e8bd4070          POP      {r4-r6,lr}
;;;447        }
;;;448        if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {       /* Validate event block type                */
;;;449            return (OS_ERR_EVENT_TYPE);
;;;450        }
;;;451    #endif
;;;452        OS_ENTER_CRITICAL();
;;;453        pdata->OSEventGrp = pevent->OSEventGrp;                /* Copy message mailbox wait list           */
;;;454        psrc              = &pevent->OSEventTbl[0];
;;;455        pdest             = &pdata->OSEventTbl[0];
;;;456    
;;;457    #if OS_EVENT_TBL_SIZE > 0
;;;458        *pdest++          = *psrc++;
;;;459    #endif
;;;460    
;;;461    #if OS_EVENT_TBL_SIZE > 1
;;;462        *pdest++          = *psrc++;
;;;463    #endif
;;;464    
;;;465    #if OS_EVENT_TBL_SIZE > 2
;;;466        *pdest++          = *psrc++;
;;;467    #endif
;;;468    
;;;469    #if OS_EVENT_TBL_SIZE > 3
;;;470        *pdest++          = *psrc++;
;;;471    #endif
;;;472    
;;;473    #if OS_EVENT_TBL_SIZE > 4
;;;474        *pdest++          = *psrc++;
;;;475    #endif
;;;476    
;;;477    #if OS_EVENT_TBL_SIZE > 5
;;;478        *pdest++          = *psrc++;
;;;479    #endif
;;;480    
;;;481    #if OS_EVENT_TBL_SIZE > 6
;;;482        *pdest++          = *psrc++;
;;;483    #endif
;;;484    
;;;485    #if OS_EVENT_TBL_SIZE > 7
;;;486        *pdest            = *psrc;
;;;487    #endif
;;;488        pdata->OSMsg = pevent->OSEventPtr;                     /* Get message from mailbox                 */
;;;489        OS_EXIT_CRITICAL();
;;;490        return (OS_NO_ERR);
;;;491    }
00047c  e12fff1e          BX       lr
                  |L1.1152|
000480  e5d40000          LDRB     r0,[r4,#0]            ;448
000484  e3500001          CMP      r0,#1                 ;448
000488  0a000001          BEQ      |L1.1172|
00048c  e3a00001          MOV      r0,#1                 ;449
000490  eafffff8          B        |L1.1144|
                  |L1.1172|
000494  ef000002          SVC      #0x2                  ;452
000498  e5d40001          LDRB     r0,[r4,#1]            ;453
00049c  e5c50006          STRB     r0,[r5,#6]            ;453
0004a0  e2841008          ADD      r1,r4,#8              ;454
0004a4  e2850004          ADD      r0,r5,#4              ;455
0004a8  e5d12000          LDRB     r2,[r1,#0]            ;458
0004ac  e5c02000          STRB     r2,[r0,#0]            ;458
0004b0  e5d11001          LDRB     r1,[r1,#1]            ;462
0004b4  e5c01001          STRB     r1,[r0,#1]            ;462
0004b8  e5940004          LDR      r0,[r4,#4]            ;488
0004bc  e5850000          STR      r0,[r5,#0]            ;488
0004c0  ef000003          SVC      #0x3                  ;489
0004c4  e3a00000          MOV      r0,#0                 ;490
0004c8  eaffffea          B        |L1.1144|
;;;492    #endif                                                     /* OS_MBOX_QUERY_EN                         */
                          ENDP

                  |L1.1228|
0004cc  00000000          DCD      OSIntNesting
                  |L1.1232|
0004d0  00000000          DCD      OSEventFreeList
                  |L1.1236|
0004d4  00000000          DCD      OSTCBCur

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?