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

📄 os_mutex.txt

📁 在KEIL下成功使用UCOS-II嵌入式操作系统
💻 TXT
📖 第 1 页 / 共 4 页
字号:
000388  e1d400b2          LDRH     r0,[r4,#2]            ;332
00038c  e20000ff          AND      r0,r0,#0xff           ;332
000390  e35000ff          CMP      r0,#0xff              ;332
000394  1a00000f          BNE      |L1.984|              ;332
000398  e1d400b2          LDRH     r0,[r4,#2]            ;333
00039c  e2000cff          AND      r0,r0,#0xff00         ;333
0003a0  e1c400b2          STRH     r0,[r4,#2]            ;333
0003a4  e1d400b2          LDRH     r0,[r4,#2]            ;334
0003a8  e59f14d4          LDR      r1,|L1.2180|          ;334
0003ac  e5911000          LDR      r1,[r1,#0]            ;334  ; OSTCBCur
0003b0  e5d1101d          LDRB     r1,[r1,#0x1d]         ;334
0003b4  e1800001          ORR      r0,r0,r1              ;334
0003b8  e1c400b2          STRH     r0,[r4,#2]            ;334
0003bc  e59f04c0          LDR      r0,|L1.2180|          ;335
0003c0  e5900000          LDR      r0,[r0,#0]            ;335  ; OSTCBCur
0003c4  e5840004          STR      r0,[r4,#4]            ;335
0003c8  ef000003          SVC      0x3  ; formerly SWI   ;336
0003cc  e3a00000          MOV      r0,#0                 ;337
0003d0  e5c60000          STRB     r0,[r6,#0]            ;337
0003d4  eaffffde          B        |L1.852|              ;338
                  |L1.984|
0003d8  e1d400b2          LDRH     r0,[r4,#2]            ;340
0003dc  e1a07440          ASR      r7,r0,#8              ;340
0003e0  e1d400b2          LDRH     r0,[r4,#2]            ;341
0003e4  e20080ff          AND      r8,r0,#0xff           ;341
0003e8  e594a004          LDR      r10,[r4,#4]           ;342
0003ec  e5da001d          LDRB     r0,[r10,#0x1d]        ;343
0003f0  e1500007          CMP      r0,r7                 ;343
0003f4  0a00003d          BEQ      |L1.1264|             ;343
0003f8  e59f0484          LDR      r0,|L1.2180|          ;343
0003fc  e5900000          LDR      r0,[r0,#0]            ;343  ; OSTCBCur
000400  e5d0001d          LDRB     r0,[r0,#0x1d]         ;343
000404  e1500008          CMP      r0,r8                 ;343
000408  aa000038          BGE      |L1.1264|             ;343
00040c  e5da001f          LDRB     r0,[r10,#0x1f]        ;344
000410  e59f1478          LDR      r1,|L1.2192|          ;344
000414  e7d10000          LDRB     r0,[r1,r0]            ;344
000418  e5da1020          LDRB     r1,[r10,#0x20]        ;344
00041c  e1100001          TST      r0,r1                 ;344
000420  0a000011          BEQ      |L1.1132|             ;344
000424  e5da001f          LDRB     r0,[r10,#0x1f]        ;347
000428  e59f1460          LDR      r1,|L1.2192|          ;347
00042c  e7d10000          LDRB     r0,[r1,r0]            ;347
000430  e5da1020          LDRB     r1,[r10,#0x20]        ;347
000434  e1c00001          BIC      r0,r0,r1              ;347
000438  e21000ff          ANDS     r0,r0,#0xff           ;347
00043c  e5da101f          LDRB     r1,[r10,#0x1f]        ;347
000440  e59f2448          LDR      r2,|L1.2192|          ;347
000444  e7c20001          STRB     r0,[r2,r1]            ;347
000448  1a000005          BNE      |L1.1124|             ;347
00044c  e5da0021          LDRB     r0,[r10,#0x21]        ;348
000450  e59f143c          LDR      r1,|L1.2196|          ;348
000454  e5d11000          LDRB     r1,[r1,#0]            ;348  ; OSRdyGrp
000458  e1c10000          BIC      r0,r1,r0              ;348
00045c  e59f1430          LDR      r1,|L1.2196|          ;348
000460  e5c10000          STRB     r0,[r1,#0]            ;348  ; OSRdyGrp
                  |L1.1124|
000464  e3a09001          MOV      r9,#1                 ;350
000468  ea000000          B        |L1.1136|             ;350
                  |L1.1132|
00046c  e3a09000          MOV      r9,#0                 ;352
                  |L1.1136|
000470  e5ca701d          STRB     r7,[r10,#0x1d]        ;354
000474  e5da001d          LDRB     r0,[r10,#0x1d]        ;355
000478  e1a001c0          ASR      r0,r0,#3              ;355
00047c  e5ca001f          STRB     r0,[r10,#0x1f]        ;355
000480  e5da001f          LDRB     r0,[r10,#0x1f]        ;356
000484  e59f140c          LDR      r1,|L1.2200|          ;356
000488  e7d10000          LDRB     r0,[r1,r0]            ;356
00048c  e5ca0021          STRB     r0,[r10,#0x21]        ;356
000490  e5da001d          LDRB     r0,[r10,#0x1d]        ;357
000494  e2000007          AND      r0,r0,#7              ;357
000498  e5ca001e          STRB     r0,[r10,#0x1e]        ;357
00049c  e5da001e          LDRB     r0,[r10,#0x1e]        ;358
0004a0  e7d10000          LDRB     r0,[r1,r0]            ;358
0004a4  e5ca0020          STRB     r0,[r10,#0x20]        ;358
0004a8  e3590001          CMP      r9,#1                 ;359
0004ac  1a00000d          BNE      |L1.1256|             ;359
0004b0  e5da0021          LDRB     r0,[r10,#0x21]        ;360
0004b4  e59f13d8          LDR      r1,|L1.2196|          ;360
0004b8  e5d11000          LDRB     r1,[r1,#0]            ;360  ; OSRdyGrp
0004bc  e1800001          ORR      r0,r0,r1              ;360
0004c0  e59f13cc          LDR      r1,|L1.2196|          ;360
0004c4  e5c10000          STRB     r0,[r1,#0]            ;360  ; OSRdyGrp
0004c8  e5da001f          LDRB     r0,[r10,#0x1f]        ;361
0004cc  e59f13bc          LDR      r1,|L1.2192|          ;361
0004d0  e7d10000          LDRB     r0,[r1,r0]            ;361
0004d4  e5da1020          LDRB     r1,[r10,#0x20]        ;361
0004d8  e1800001          ORR      r0,r0,r1              ;361
0004dc  e5da101f          LDRB     r1,[r10,#0x1f]        ;361
0004e0  e59f23a8          LDR      r2,|L1.2192|          ;361
0004e4  e7c20001          STRB     r0,[r2,r1]            ;361
                  |L1.1256|
0004e8  e59f0398          LDR      r0,|L1.2184|          ;363
0004ec  e780a107          STR      r10,[r0,r7,LSL #2]    ;363
                  |L1.1264|
0004f0  e59f038c          LDR      r0,|L1.2180|          ;365
0004f4  e5900000          LDR      r0,[r0,#0]            ;365  ; OSTCBCur
0004f8  e5d0001c          LDRB     r0,[r0,#0x1c]         ;365
0004fc  e3800010          ORR      r0,r0,#0x10           ;365
000500  e59f137c          LDR      r1,|L1.2180|          ;365
000504  e5911000          LDR      r1,[r1,#0]            ;365  ; OSTCBCur
000508  e5c1001c          STRB     r0,[r1,#0x1c]         ;365
00050c  e59f0370          LDR      r0,|L1.2180|          ;366
000510  e5900000          LDR      r0,[r0,#0]            ;366  ; OSTCBCur
000514  e1c051ba          STRH     r5,[r0,#0x1a]         ;366
000518  e1a00004          MOV      r0,r4                 ;367
00051c  ebfffffe          BL       OS_EventTaskWait      ;367
000520  ef000003          SVC      0x3  ; formerly SWI   ;368
000524  ebfffffe          BL       OS_Sched              ;369
000528  ef000002          SVC      0x2  ; formerly SWI   ;370
00052c  e59f0350          LDR      r0,|L1.2180|          ;371
000530  e5900000          LDR      r0,[r0,#0]            ;371  ; OSTCBCur
000534  e5d0001c          LDRB     r0,[r0,#0x1c]         ;371
000538  e3100010          TST      r0,#0x10              ;371
00053c  0a000005          BEQ      |L1.1368|             ;371
000540  e1a00004          MOV      r0,r4                 ;372
000544  ebfffffe          BL       OS_EventTO            ;372
000548  ef000003          SVC      0x3  ; formerly SWI   ;373
00054c  e3a0000a          MOV      r0,#0xa               ;374
000550  e5c60000          STRB     r0,[r6,#0]            ;374
000554  eaffff7e          B        |L1.852|              ;375
                  |L1.1368|
000558  e3a00000          MOV      r0,#0                 ;377
00055c  e59f1320          LDR      r1,|L1.2180|          ;377
000560  e5911000          LDR      r1,[r1,#0]            ;377  ; OSTCBCur
000564  e581000c          STR      r0,[r1,#0xc]          ;377
000568  ef000003          SVC      0x3  ; formerly SWI   ;378
00056c  e3a00000          MOV      r0,#0                 ;379
000570  e5c60000          STRB     r0,[r6,#0]            ;379
000574  eaffff76          B        |L1.852|
                          ENDP

                  OSMutexPost PROC
;;;399    INT8U  OSMutexPost (OS_EVENT *pevent)
;;;400    {
000578  e92d4070          PUSH     {r4-r6,lr}
00057c  e1a04000          MOV      r4,r0
;;;401    #if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
;;;402        OS_CPU_SR  cpu_sr;
;;;403    #endif    
;;;404        INT8U      pip;                                   /* Priority inheritance priority                 */
;;;405        INT8U      prio;
;;;406    
;;;407    
;;;408        if (OSIntNesting > 0) {                           /* See if called from ISR ...                    */
000580  e59f02f8          LDR      r0,|L1.2176|
000584  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000588  e3500000          CMP      r0,#0
00058c  da000001          BLE      |L1.1432|
;;;409            return (OS_ERR_POST_ISR);                     /* ... can't POST mutex from an ISR              */
000590  e3a00005          MOV      r0,#5
;;;410        }
;;;411    #if OS_ARG_CHK_EN > 0
;;;412        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
;;;413            return (OS_ERR_PEVENT_NULL);
;;;414        }
;;;415        if (pevent->OSEventType != OS_EVENT_TYPE_MUTEX) { /* Validate event block type                     */
;;;416            return (OS_ERR_EVENT_TYPE);
;;;417        }                                                 
;;;418    #endif
;;;419        OS_ENTER_CRITICAL();
;;;420        pip  = (INT8U)(pevent->OSEventCnt >> 8);          /* Get priority inheritance priority of mutex    */
;;;421        prio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8);  /* Get owner's original priority      */
;;;422        if (OSTCBCur->OSTCBPrio != pip && 
;;;423            OSTCBCur->OSTCBPrio != prio) {                /* See if posting task owns the MUTEX            */
;;;424            OS_EXIT_CRITICAL();
;;;425            return (OS_ERR_NOT_MUTEX_OWNER);
;;;426        }
;;;427        if (OSTCBCur->OSTCBPrio == pip) {                 /* Did we have to raise current task's priority? */
;;;428                                                          /* Yes, Return to original priority              */
;;;429                                                          /*      Remove owner from ready list at 'pip'    */
;;;430            if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {
;;;431                OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
;;;432            }
;;;433            OSTCBCur->OSTCBPrio         = prio;
;;;434            OSTCBCur->OSTCBY            = prio >> 3;
;;;435            OSTCBCur->OSTCBBitY         = OSMapTbl[OSTCBCur->OSTCBY];
;;;436            OSTCBCur->OSTCBX            = prio & 0x07;
;;;437            OSTCBCur->OSTCBBitX         = OSMapTbl[OSTCBCur->OSTCBX];
;;;438            OSRdyGrp                   |= OSTCBCur->OSTCBBitY;
;;;439            OSRdyTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;
;;;440            OSTCBPrioTbl[prio]          = (OS_TCB *)OSTCBCur;
;;;441        }
;;;442        OSTCBPrioTbl[pip] = (OS_TCB *)1;                  /* Reserve table entry                           */
;;;443        if (pevent->OSEventGrp != 0x00) {                 /* Any task waiting for the mutex?               */
;;;444                                                          /* Yes, Make HPT waiting for mutex ready         */
;;;445            prio                = OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MUTEX);
;;;446            pevent->OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;  /*      Save priority of mutex's new owner       */
;;;447            pevent->OSEventCnt |= prio;
;;;448            pevent->OSEventPtr  = OSTCBPrioTbl[prio];     /*      Link to mutex owner's OS_TCB             */
;;;449            OS_EXIT_CRITICAL();
;;;450            OS_Sched();                                   /*      Find highest priority task ready to run  */
;;;451            return (OS_NO_ERR);
;;;452        }
;;;453        pevent->OSEventCnt |= OS_MUTEX_AVAILABLE;         /* No,  Mutex is now available                   */
;;;454        pevent->OSEventPtr  = (void *)0;
;;;455        OS_EXIT_CRITICAL();
;;;456        return (OS_NO_ERR);
;;;457    }
                  |L1.1428|
000594  e8bd8070          POP      {r4-r6,pc}
                  |L1.1432|
000598  e3540000          CMP      r4,#0                 ;412
00059c  1a000001          BNE      |L1.1448|             ;412
0005a0  e3a00004          MOV      r0,#4                 ;413
0005a4  eafffffa          B        |L1.1428|             ;413
                  |L1.1448|
0005a8  e5d40000          LDRB     r0,[r4,#0]            ;415
0005ac  e3500004          CMP      r0,#4                 ;415
0005b0  0a000001          BEQ      |L1.1468|             ;415
0005b4  e3a00001          MOV      r0,#1                 ;416
0005b8  eafffff5          B        |L1.1428|             ;416
                  |L1.1468|
0005bc  ef000002          SVC      0x2  ; formerly SWI   ;419
0005c0  e1d400b2          LDRH     r0,[r4,#2]            ;420
0005c4  e1a05440          ASR      r5,r0,#8              ;420
0005c8  e1d400b2          LDRH     r0,[r4,#2]            ;421
0005cc  e20060ff          AND      r6,r0,#0xff           ;421
0005d0  e59f02ac          LDR      r0,|L1.2180|          ;422
0005d4  e5900000          LDR      r0,[r0,#0]            ;422  ; OSTCBCur
0005d8  e5d0001d          LDRB     r0,[r0,#0x1d]         ;422
0005dc  e1500005          CMP      r0,r5                 ;422
0005e0  0a000007          BEQ      |L1.1540|             ;422
0005e4  e59f0298          LDR      r0,|L1.2180|          ;423
0005e8  e5900000          LDR      r0,[r0,#0]            ;423  ; OSTCBCur
0005ec  e5d0001d          LDRB     r0,[r0,#0x1d]         ;423
0005f0  e1500006          CMP      r0,r6                 ;423
0005f4  0a000002          BEQ      |L1.1540|             ;423
0005f8  ef000003          SVC      0x3  ; formerly SWI   ;424
0005fc  e3a00078          MOV      r0,#0x78              ;425
000600  eaffffe3          B        |L1.1428|             ;425
                  |L1.1540|
000604  e59f0278          LDR      r0,|L1.2180|          ;427
000608  e5900000          LDR      r0,[r0,#0]            ;427  ; OSTCBCur
00060c  e5d0001d          LDRB     r0,[r0,#0x1d]         ;427
000610  e1500005          CMP      r0,r5                 ;427
000614  1a00004c          BNE      |L1.1868|             ;427
000618  e59f0264          LDR      r0,|L1.2180|          ;430
00061c  e5900000          LDR      r0,[r0,#0]            ;430  ; OSTCBCur
000620  e5d0001f          LDRB     r0,[r0,#0x1f]         ;430
000624  e59f1264          LDR      r1,|L1.2192|          ;430
000628  e7d10000          LDRB     r0,[r1,r0]            ;430
00062c  e59f1250          LDR      r1,|L1.2180|          ;430

⌨️ 快捷键说明

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