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

📄 os_mbox.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 4 页
字号:
00015c  da000003          BLE      |L1.368|
000160  e3a0000f          MOV      r0,#0xf
000164  e5c60000          STRB     r0,[r6,#0]
000168  e1a00004          MOV      r0,r4
00016c  eaffffe8          B        |L1.276|
                  |L1.368|
000170  ebfffffe          BL       OS_CPU_SR_Save
000174  e1a09000          MOV      r9,r0
000178  e5d4000a          LDRB     r0,[r4,#0xa]
00017c  e3500000          CMP      r0,#0
000180  0a000001          BEQ      |L1.396|
000184  e3a07001          MOV      r7,#1
000188  ea000000          B        |L1.400|
                  |L1.396|
00018c  e3a07000          MOV      r7,#0
                  |L1.400|
000190  e3550000          CMP      r5,#0
000194  0a000002          BEQ      |L1.420|
000198  e3550001          CMP      r5,#1
00019c  1a00003a          BNE      |L1.652|
0001a0  ea00001a          B        |L1.528|
                  |L1.420|
0001a4  e1a00000          MOV      r0,r0
0001a8  e3570000          CMP      r7,#0
0001ac  1a000011          BNE      |L1.504|
0001b0  e3a0003f          MOV      r0,#0x3f
0001b4  e5c4000f          STRB     r0,[r4,#0xf]
0001b8  e3a00000          MOV      r0,#0
0001bc  e5c40010          STRB     r0,[r4,#0x10]
0001c0  e5c40000          STRB     r0,[r4,#0]
0001c4  e59f0620          LDR      r0,|L1.2028|
0001c8  e5900000          LDR      r0,[r0,#0]  ; OSEventFreeList
0001cc  e5840004          STR      r0,[r4,#4]
0001d0  e3a00000          MOV      r0,#0
0001d4  e1c400b8          STRH     r0,[r4,#8]
0001d8  e59f060c          LDR      r0,|L1.2028|
0001dc  e5804000          STR      r4,[r0,#0]  ; OSEventFreeList
0001e0  e1a00009          MOV      r0,r9
0001e4  ebfffffe          BL       OS_CPU_SR_Restore
0001e8  e3a00000          MOV      r0,#0
0001ec  e5c60000          STRB     r0,[r6,#0]
0001f0  e3a08000          MOV      r8,#0
0001f4  ea000004          B        |L1.524|
                  |L1.504|
0001f8  e1a00009          MOV      r0,r9
0001fc  ebfffffe          BL       OS_CPU_SR_Restore
000200  e3a00049          MOV      r0,#0x49
000204  e5c60000          STRB     r0,[r6,#0]
000208  e1a08004          MOV      r8,r4
                  |L1.524|
00020c  ea000025          B        |L1.680|
                  |L1.528|
000210  e1a00000          MOV      r0,r0
000214  ea000004          B        |L1.556|
                  |L1.536|
000218  e3a03000          MOV      r3,#0
00021c  e3a02002          MOV      r2,#2
000220  e1a01003          MOV      r1,r3
000224  e1a00004          MOV      r0,r4
000228  ebfffffe          BL       OS_EventTaskRdy
                  |L1.556|
00022c  e5d4000a          LDRB     r0,[r4,#0xa]
000230  e3500000          CMP      r0,#0
000234  1afffff7          BNE      |L1.536|
000238  e3a0003f          MOV      r0,#0x3f
00023c  e5c4000f          STRB     r0,[r4,#0xf]
000240  e3a00000          MOV      r0,#0
000244  e5c40010          STRB     r0,[r4,#0x10]
000248  e5c40000          STRB     r0,[r4,#0]
00024c  e59f0598          LDR      r0,|L1.2028|
000250  e5900000          LDR      r0,[r0,#0]  ; OSEventFreeList
000254  e5840004          STR      r0,[r4,#4]
000258  e3a00000          MOV      r0,#0
00025c  e1c400b8          STRH     r0,[r4,#8]
000260  e59f0584          LDR      r0,|L1.2028|
000264  e5804000          STR      r4,[r0,#0]  ; OSEventFreeList
000268  e1a00009          MOV      r0,r9
00026c  ebfffffe          BL       OS_CPU_SR_Restore
000270  e3570001          CMP      r7,#1
000274  1a000000          BNE      |L1.636|
000278  ebfffffe          BL       OS_Sched
                  |L1.636|
00027c  e3a00000          MOV      r0,#0
000280  e5c60000          STRB     r0,[r6,#0]
000284  e3a08000          MOV      r8,#0
000288  ea000006          B        |L1.680|
                  |L1.652|
00028c  e1a00000          MOV      r0,r0
000290  e1a00009          MOV      r0,r9
000294  ebfffffe          BL       OS_CPU_SR_Restore
000298  e3a00007          MOV      r0,#7
00029c  e5c60000          STRB     r0,[r6,#0]
0002a0  e1a08004          MOV      r8,r4
0002a4  e1a00000          MOV      r0,r0
                  |L1.680|
0002a8  e1a00000          MOV      r0,r0
0002ac  e1a00008          MOV      r0,r8
0002b0  eaffff97          B        |L1.276|
                          ENDP

                  OSMboxPend PROC
;;;274    void  *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
;;;275    {
0002b4  e92d47f0          PUSH     {r4-r10,lr}
0002b8  e1a04000          MOV      r4,r0
0002bc  e1a05001          MOV      r5,r1
0002c0  e1a06002          MOV      r6,r2
;;;276        void      *msg;
;;;277        INT8U      pend_stat;
;;;278    #if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
;;;279        OS_CPU_SR  cpu_sr = 0;
0002c4  e3a09000          MOV      r9,#0
;;;280    #endif
;;;281    
;;;282    
;;;283    
;;;284    #if OS_ARG_CHK_EN > 0
;;;285        if (err == (INT8U *)0) {                          /* Validate 'err'                                */
0002c8  e3560000          CMP      r6,#0
0002cc  1a000002          BNE      |L1.732|
;;;286            return ((void *)0);
0002d0  e3a00000          MOV      r0,#0
                  |L1.724|
0002d4  e8bd47f0          POP      {r4-r10,lr}
;;;287        }
;;;288        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
;;;289            *err = OS_ERR_PEVENT_NULL;
;;;290            return ((void *)0);
;;;291        }
;;;292    #endif
;;;293        if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {  /* Validate event block type                     */
;;;294            *err = OS_ERR_EVENT_TYPE;
;;;295            return ((void *)0);
;;;296        }
;;;297        if (OSIntNesting > 0) {                           /* See if called from ISR ...                    */
;;;298            *err = OS_ERR_PEND_ISR;                       /* ... can't PEND from an ISR                    */
;;;299            return ((void *)0);
;;;300        }
;;;301        if (OSLockNesting > 0) {                          /* See if called with scheduler locked ...       */
;;;302            *err = OS_ERR_PEND_LOCKED;                    /* ... can't PEND when locked                    */
;;;303            return ((void *)0);
;;;304        }
;;;305        OS_ENTER_CRITICAL();
;;;306        msg = pevent->OSEventPtr;
;;;307        if (msg != (void *)0) {                           /* See if there is already a message             */
;;;308            pevent->OSEventPtr = (void *)0;               /* Clear the mailbox                             */
;;;309            OS_EXIT_CRITICAL();
;;;310            *err = OS_ERR_NONE;
;;;311            return (msg);                                 /* Return the message received (or NULL)         */
;;;312        }
;;;313        OSTCBCur->OSTCBStat     |= OS_STAT_MBOX;          /* Message not available, task will pend         */
;;;314        OSTCBCur->OSTCBStatPend  = OS_STAT_PEND_OK;
;;;315        OSTCBCur->OSTCBDly       = timeout;               /* Load timeout in TCB                           */
;;;316        OS_EventTaskWait(pevent);                         /* Suspend task until event or timeout occurs    */
;;;317        OS_EXIT_CRITICAL();
;;;318        OS_Sched();                                       /* Find next highest priority task ready to run  */
;;;319        OS_ENTER_CRITICAL();
;;;320        if (OSTCBCur->OSTCBStatPend != OS_STAT_PEND_OK) { /* See if we weren't given the message           */
;;;321            pend_stat = OSTCBCur->OSTCBStatPend;
;;;322            OS_EventTOAbort(pevent);                      /* Timed out, Make task ready                    */
;;;323            OS_EXIT_CRITICAL();
;;;324            switch (pend_stat) {
;;;325                case OS_STAT_PEND_TO:
;;;326                default:
;;;327                     *err = OS_ERR_TIMEOUT;               /* Indicate that a timeout occured               */
;;;328                     break;
;;;329    
;;;330                case OS_STAT_PEND_ABORT:
;;;331                     *err = OS_ERR_PEND_ABORT;            /* Indicate that we aborted                      */
;;;332                     break;
;;;333            }
;;;334            return ((void *)0);                           /* Return a NULL message                         */
;;;335        }
;;;336        msg                     = OSTCBCur->OSTCBMsg;
;;;337        OSTCBCur->OSTCBMsg      = (void *)0;              /* Yes, clear message received                   */
;;;338        OSTCBCur->OSTCBStat     = OS_STAT_RDY;
;;;339        OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;          /* No longer waiting for event                   */
;;;340        OS_EXIT_CRITICAL();
;;;341        *err                    = OS_ERR_NONE;
;;;342        return (msg);                                     /* Return the message received                   */
;;;343    }
0002d8  e12fff1e          BX       lr
                  |L1.732|
0002dc  e3540000          CMP      r4,#0
0002e0  1a000003          BNE      |L1.756|
0002e4  e3a00004          MOV      r0,#4
0002e8  e5c60000          STRB     r0,[r6,#0]
0002ec  e3a00000          MOV      r0,#0
0002f0  eafffff7          B        |L1.724|
                  |L1.756|
0002f4  e5d40000          LDRB     r0,[r4,#0]
0002f8  e3500001          CMP      r0,#1
0002fc  0a000003          BEQ      |L1.784|
000300  e3a00001          MOV      r0,#1
000304  e5c60000          STRB     r0,[r6,#0]
000308  e3a00000          MOV      r0,#0
00030c  eafffff0          B        |L1.724|
                  |L1.784|
000310  e59f04d0          LDR      r0,|L1.2024|
000314  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000318  e3500000          CMP      r0,#0
00031c  da000003          BLE      |L1.816|
000320  e3a00002          MOV      r0,#2
000324  e5c60000          STRB     r0,[r6,#0]
000328  e3a00000          MOV      r0,#0
00032c  eaffffe8          B        |L1.724|
                  |L1.816|
000330  e59f04b8          LDR      r0,|L1.2032|
000334  e5d00000          LDRB     r0,[r0,#0]  ; OSLockNesting
000338  e3500000          CMP      r0,#0
00033c  da000003          BLE      |L1.848|
000340  e3a0000d          MOV      r0,#0xd
000344  e5c60000          STRB     r0,[r6,#0]
000348  e3a00000          MOV      r0,#0
00034c  eaffffe0          B        |L1.724|
                  |L1.848|
000350  ebfffffe          BL       OS_CPU_SR_Save
000354  e1a09000          MOV      r9,r0
000358  e5947004          LDR      r7,[r4,#4]
00035c  e3570000          CMP      r7,#0
000360  0a000007          BEQ      |L1.900|
000364  e3a00000          MOV      r0,#0
000368  e5840004          STR      r0,[r4,#4]
00036c  e1a00009          MOV      r0,r9
000370  ebfffffe          BL       OS_CPU_SR_Restore
000374  e3a00000          MOV      r0,#0
000378  e5c60000          STRB     r0,[r6,#0]
00037c  e1a00007          MOV      r0,r7
000380  eaffffd3          B        |L1.724|
                  |L1.900|
000384  e59f0468          LDR      r0,|L1.2036|
000388  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
00038c  e5d0002c          LDRB     r0,[r0,#0x2c]
000390  e3800002          ORR      r0,r0,#2
000394  e59f1458          LDR      r1,|L1.2036|
000398  e5911000          LDR      r1,[r1,#0]  ; OSTCBCur
00039c  e5c1002c          STRB     r0,[r1,#0x2c]
0003a0  e3a00000          MOV      r0,#0
0003a4  e59f1448          LDR      r1,|L1.2036|
0003a8  e5911000          LDR      r1,[r1,#0]  ; OSTCBCur
0003ac  e5c1002d          STRB     r0,[r1,#0x2d]
0003b0  e59f043c          LDR      r0,|L1.2036|
0003b4  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
0003b8  e1c052ba          STRH     r5,[r0,#0x2a]
0003bc  e1a00004          MOV      r0,r4
0003c0  ebfffffe          BL       OS_EventTaskWait

⌨️ 快捷键说明

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