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

📄 os_mbox.txt

📁 在KEIL下成功使用UCOS-II嵌入式操作系统
💻 TXT
📖 第 1 页 / 共 3 页
字号:
000374  e5d50000          LDRB     r0,[r5,#0]            ;324
000378  e3500001          CMP      r0,#1                 ;324
00037c  0a000001          BEQ      |L1.904|              ;324
000380  e3a00001          MOV      r0,#1                 ;325
000384  eafffff5          B        |L1.864|              ;325
                  |L1.904|
000388  ef000002          SVC      0x2  ; formerly SWI   ;328
00038c  e5d50001          LDRB     r0,[r5,#1]            ;329
000390  e3500000          CMP      r0,#0                 ;329
000394  0a000007          BEQ      |L1.952|              ;329
000398  e3a02002          MOV      r2,#2                 ;330
00039c  e1a01004          MOV      r1,r4                 ;330
0003a0  e1a00005          MOV      r0,r5                 ;330
0003a4  ebfffffe          BL       OS_EventTaskRdy       ;330
0003a8  ef000003          SVC      0x3  ; formerly SWI   ;331
0003ac  ebfffffe          BL       OS_Sched              ;332
0003b0  e3a00000          MOV      r0,#0                 ;333
0003b4  eaffffe9          B        |L1.864|              ;333
                  |L1.952|
0003b8  e5950004          LDR      r0,[r5,#4]            ;335
0003bc  e3500000          CMP      r0,#0                 ;335
0003c0  0a000002          BEQ      |L1.976|              ;335
0003c4  ef000003          SVC      0x3  ; formerly SWI   ;336
0003c8  e3a00014          MOV      r0,#0x14              ;337
0003cc  eaffffe3          B        |L1.864|              ;337
                  |L1.976|
0003d0  e5854004          STR      r4,[r5,#4]            ;339
0003d4  ef000003          SVC      0x3  ; formerly SWI   ;340
0003d8  e3a00000          MOV      r0,#0                 ;341
0003dc  eaffffdf          B        |L1.864|              ;341
                          ENDP

                  OSMboxPostOpt PROC
;;;375    INT8U  OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)
;;;376    {
0003e0  e92d4070          PUSH     {r4-r6,lr}
0003e4  e1a04000          MOV      r4,r0
0003e8  e1a05001          MOV      r5,r1
0003ec  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'                             */
0003f0  e3540000          CMP      r4,#0
0003f4  1a000001          BNE      |L1.1024|
;;;384            return (OS_ERR_PEVENT_NULL);
0003f8  e3a00004          MOV      r0,#4
;;;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    }
                  |L1.1020|
0003fc  e8bd8070          POP      {r4-r6,pc}
                  |L1.1024|
000400  e3550000          CMP      r5,#0                 ;386
000404  1a000001          BNE      |L1.1040|             ;386
000408  e3a00003          MOV      r0,#3                 ;387
00040c  eafffffa          B        |L1.1020|             ;387
                  |L1.1040|
000410  e5d40000          LDRB     r0,[r4,#0]            ;389
000414  e3500001          CMP      r0,#1                 ;389
000418  0a000001          BEQ      |L1.1060|             ;389
00041c  e3a00001          MOV      r0,#1                 ;390
000420  eafffff5          B        |L1.1020|             ;390
                  |L1.1060|
000424  ef000002          SVC      0x2  ; formerly SWI   ;393
000428  e5d40001          LDRB     r0,[r4,#1]            ;394
00042c  e3500000          CMP      r0,#0                 ;394
000430  0a000012          BEQ      |L1.1152|             ;394
000434  e3160001          TST      r6,#1                 ;395
000438  0a000008          BEQ      |L1.1120|             ;395
00043c  ea000003          B        |L1.1104|             ;396
                  |L1.1088|
000440  e3a02002          MOV      r2,#2                 ;397
000444  e1a01005          MOV      r1,r5                 ;397
000448  e1a00004          MOV      r0,r4                 ;397
00044c  ebfffffe          BL       OS_EventTaskRdy       ;397
                  |L1.1104|
000450  e5d40001          LDRB     r0,[r4,#1]            ;396
000454  e3500000          CMP      r0,#0                 ;396
000458  1afffff8          BNE      |L1.1088|             ;396
00045c  ea000003          B        |L1.1136|             ;396
                  |L1.1120|
000460  e3a02002          MOV      r2,#2                 ;400
000464  e1a01005          MOV      r1,r5                 ;400
000468  e1a00004          MOV      r0,r4                 ;400
00046c  ebfffffe          BL       OS_EventTaskRdy       ;400
                  |L1.1136|
000470  ef000003          SVC      0x3  ; formerly SWI   ;402
000474  ebfffffe          BL       OS_Sched              ;403
000478  e3a00000          MOV      r0,#0                 ;404
00047c  eaffffde          B        |L1.1020|             ;404
                  |L1.1152|
000480  e5940004          LDR      r0,[r4,#4]            ;406
000484  e3500000          CMP      r0,#0                 ;406
000488  0a000002          BEQ      |L1.1176|             ;406
00048c  ef000003          SVC      0x3  ; formerly SWI   ;407
000490  e3a00014          MOV      r0,#0x14              ;408
000494  eaffffd8          B        |L1.1020|             ;408
                  |L1.1176|
000498  e5845004          STR      r5,[r4,#4]            ;410
00049c  ef000003          SVC      0x3  ; formerly SWI   ;411
0004a0  e3a00000          MOV      r0,#0                 ;412
0004a4  eaffffd4          B        |L1.1020|             ;412
                          ENDP

                  OSMboxQuery PROC
;;;435    INT8U  OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *pdata)
;;;436    {
0004a8  e92d41f0          PUSH     {r4-r8,lr}
0004ac  e1a04000          MOV      r4,r0
0004b0  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'                        */
0004b4  e3540000          CMP      r4,#0
0004b8  1a000001          BNE      |L1.1220|
;;;446            return (OS_ERR_PEVENT_NULL);
0004bc  e3a00004          MOV      r0,#4
;;;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    }
                  |L1.1216|
0004c0  e8bd81f0          POP      {r4-r8,pc}
                  |L1.1220|
0004c4  e5d40000          LDRB     r0,[r4,#0]            ;448
0004c8  e3500001          CMP      r0,#1                 ;448
0004cc  0a000001          BEQ      |L1.1240|             ;448
0004d0  e3a00001          MOV      r0,#1                 ;449
0004d4  eafffff9          B        |L1.1216|             ;449
                  |L1.1240|
0004d8  ef000002          SVC      0x2  ; formerly SWI   ;452
0004dc  e5d40001          LDRB     r0,[r4,#1]            ;453
0004e0  e5c50006          STRB     r0,[r5,#6]            ;453
0004e4  e2846008          ADD      r6,r4,#8              ;454
0004e8  e2857004          ADD      r7,r5,#4              ;455
0004ec  e4d60001          LDRB     r0,[r6],#1            ;458
0004f0  e4c70001          STRB     r0,[r7],#1            ;458
0004f4  e4d60001          LDRB     r0,[r6],#1            ;462
0004f8  e4c70001          STRB     r0,[r7],#1            ;462
0004fc  e5940004          LDR      r0,[r4,#4]            ;488
000500  e5850000          STR      r0,[r5,#0]            ;488
000504  ef000003          SVC      0x3  ; formerly SWI   ;489
000508  e3a00000          MOV      r0,#0                 ;490
00050c  eaffffeb          B        |L1.1216|             ;490
                  |L1.1296|
000510  00000000          DCD      OSIntNesting          ;490
                  |L1.1300|
000514  00000000          DCD      OSEventFreeList       ;490
                  |L1.1304|
000518  00000000          DCD      OSTCBCur              ;490
                          ENDP


⌨️ 快捷键说明

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