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

📄 os_mutex.txt

📁 嵌入式开发
💻 TXT
📖 第 1 页 / 共 4 页
字号:
000398  e1d400b2          LDRH     r0,[r4,#2]            ;332
00039c  e20000ff          AND      r0,r0,#0xff           ;332
0003a0  e35000ff          CMP      r0,#0xff              ;332
0003a4  1a00000f          BNE      |L1.1000|             ;332
0003a8  e1d400b2          LDRH     r0,[r4,#2]            ;333
0003ac  e2000cff          AND      r0,r0,#0xff00         ;333
0003b0  e1c400b2          STRH     r0,[r4,#2]            ;333
0003b4  e1d400b2          LDRH     r0,[r4,#2]            ;334
0003b8  e59f14dc          LDR      r1,|L1.2204|          ;334
0003bc  e5911000          LDR      r1,[r1,#0]            ;334  ; OSTCBCur
0003c0  e5d1102d          LDRB     r1,[r1,#0x2d]         ;334
0003c4  e1800001          ORR      r0,r0,r1              ;334
0003c8  e1c400b2          STRH     r0,[r4,#2]            ;334
0003cc  e59f04c8          LDR      r0,|L1.2204|          ;335
0003d0  e5900000          LDR      r0,[r0,#0]            ;335  ; OSTCBCur
0003d4  e5840004          STR      r0,[r4,#4]            ;335
0003d8  ef000003          SVC      0x3  ; formerly SWI   ;336
0003dc  e3a00000          MOV      r0,#0                 ;337
0003e0  e5c60000          STRB     r0,[r6,#0]            ;337
0003e4  eaffffdd          B        |L1.864|              ;338
                  |L1.1000|
0003e8  e1d400b2          LDRH     r0,[r4,#2]            ;340
0003ec  e1a07440          ASR      r7,r0,#8              ;340
0003f0  e1d400b2          LDRH     r0,[r4,#2]            ;341
0003f4  e20080ff          AND      r8,r0,#0xff           ;341
0003f8  e594a004          LDR      r10,[r4,#4]           ;342
0003fc  e5da002d          LDRB     r0,[r10,#0x2d]        ;343
000400  e1500007          CMP      r0,r7                 ;343
000404  0a00003d          BEQ      |L1.1280|             ;343
000408  e59f048c          LDR      r0,|L1.2204|          ;343
00040c  e5900000          LDR      r0,[r0,#0]            ;343  ; OSTCBCur
000410  e5d0002d          LDRB     r0,[r0,#0x2d]         ;343
000414  e1500008          CMP      r0,r8                 ;343
000418  aa000038          BGE      |L1.1280|             ;343
00041c  e5da002f          LDRB     r0,[r10,#0x2f]        ;344
000420  e59f1480          LDR      r1,|L1.2216|          ;344
000424  e7d10000          LDRB     r0,[r1,r0]            ;344
000428  e5da1030          LDRB     r1,[r10,#0x30]        ;344
00042c  e1100001          TST      r0,r1                 ;344
000430  0a000011          BEQ      |L1.1148|             ;344
000434  e5da002f          LDRB     r0,[r10,#0x2f]        ;347
000438  e59f1468          LDR      r1,|L1.2216|          ;347
00043c  e7d10000          LDRB     r0,[r1,r0]            ;347
000440  e5da1030          LDRB     r1,[r10,#0x30]        ;347
000444  e1c00001          BIC      r0,r0,r1              ;347
000448  e21000ff          ANDS     r0,r0,#0xff           ;347
00044c  e5da102f          LDRB     r1,[r10,#0x2f]        ;347
000450  e59f2450          LDR      r2,|L1.2216|          ;347
000454  e7c20001          STRB     r0,[r2,r1]            ;347
000458  1a000005          BNE      |L1.1140|             ;347
00045c  e5da0031          LDRB     r0,[r10,#0x31]        ;348
000460  e59f1444          LDR      r1,|L1.2220|          ;348
000464  e5d11000          LDRB     r1,[r1,#0]            ;348  ; OSRdyGrp
000468  e1c10000          BIC      r0,r1,r0              ;348
00046c  e59f1438          LDR      r1,|L1.2220|          ;348
000470  e5c10000          STRB     r0,[r1,#0]            ;348  ; OSRdyGrp
                  |L1.1140|
000474  e3a09001          MOV      r9,#1                 ;350
000478  ea000000          B        |L1.1152|             ;350
                  |L1.1148|
00047c  e3a09000          MOV      r9,#0                 ;352
                  |L1.1152|
000480  e5ca702d          STRB     r7,[r10,#0x2d]        ;354
000484  e5da002d          LDRB     r0,[r10,#0x2d]        ;355
000488  e1a001c0          ASR      r0,r0,#3              ;355
00048c  e5ca002f          STRB     r0,[r10,#0x2f]        ;355
000490  e5da002f          LDRB     r0,[r10,#0x2f]        ;356
000494  e59f1414          LDR      r1,|L1.2224|          ;356
000498  e7d10000          LDRB     r0,[r1,r0]            ;356
00049c  e5ca0031          STRB     r0,[r10,#0x31]        ;356
0004a0  e5da002d          LDRB     r0,[r10,#0x2d]        ;357
0004a4  e2000007          AND      r0,r0,#7              ;357
0004a8  e5ca002e          STRB     r0,[r10,#0x2e]        ;357
0004ac  e5da002e          LDRB     r0,[r10,#0x2e]        ;358
0004b0  e7d10000          LDRB     r0,[r1,r0]            ;358
0004b4  e5ca0030          STRB     r0,[r10,#0x30]        ;358
0004b8  e3590001          CMP      r9,#1                 ;359
0004bc  1a00000d          BNE      |L1.1272|             ;359
0004c0  e5da0031          LDRB     r0,[r10,#0x31]        ;360
0004c4  e59f13e0          LDR      r1,|L1.2220|          ;360
0004c8  e5d11000          LDRB     r1,[r1,#0]            ;360  ; OSRdyGrp
0004cc  e1800001          ORR      r0,r0,r1              ;360
0004d0  e59f13d4          LDR      r1,|L1.2220|          ;360
0004d4  e5c10000          STRB     r0,[r1,#0]            ;360  ; OSRdyGrp
0004d8  e5da002f          LDRB     r0,[r10,#0x2f]        ;361
0004dc  e59f13c4          LDR      r1,|L1.2216|          ;361
0004e0  e7d10000          LDRB     r0,[r1,r0]            ;361
0004e4  e5da1030          LDRB     r1,[r10,#0x30]        ;361
0004e8  e1800001          ORR      r0,r0,r1              ;361
0004ec  e5da102f          LDRB     r1,[r10,#0x2f]        ;361
0004f0  e59f23b0          LDR      r2,|L1.2216|          ;361
0004f4  e7c20001          STRB     r0,[r2,r1]            ;361
                  |L1.1272|
0004f8  e59f03a0          LDR      r0,|L1.2208|          ;363
0004fc  e780a107          STR      r10,[r0,r7,LSL #2]    ;363
                  |L1.1280|
000500  e59f0394          LDR      r0,|L1.2204|          ;365
000504  e5900000          LDR      r0,[r0,#0]            ;365  ; OSTCBCur
000508  e5d0002c          LDRB     r0,[r0,#0x2c]         ;365
00050c  e3800010          ORR      r0,r0,#0x10           ;365
000510  e59f1384          LDR      r1,|L1.2204|          ;365
000514  e5911000          LDR      r1,[r1,#0]            ;365  ; OSTCBCur
000518  e5c1002c          STRB     r0,[r1,#0x2c]         ;365
00051c  e59f0378          LDR      r0,|L1.2204|          ;366
000520  e5900000          LDR      r0,[r0,#0]            ;366  ; OSTCBCur
000524  e1c052ba          STRH     r5,[r0,#0x2a]         ;366
000528  e1a00004          MOV      r0,r4                 ;367
00052c  ebfffffe          BL       OS_EventTaskWait      ;367
000530  ef000003          SVC      0x3  ; formerly SWI   ;368
000534  ebfffffe          BL       OS_Sched              ;369
000538  ef000002          SVC      0x2  ; formerly SWI   ;370
00053c  e59f0358          LDR      r0,|L1.2204|          ;371
000540  e5900000          LDR      r0,[r0,#0]            ;371  ; OSTCBCur
000544  e5d0002c          LDRB     r0,[r0,#0x2c]         ;371
000548  e3100010          TST      r0,#0x10              ;371
00054c  0a000005          BEQ      |L1.1384|             ;371
000550  e1a00004          MOV      r0,r4                 ;372
000554  ebfffffe          BL       OS_EventTO            ;372
000558  ef000003          SVC      0x3  ; formerly SWI   ;373
00055c  e3a0000a          MOV      r0,#0xa               ;374
000560  e5c60000          STRB     r0,[r6,#0]            ;374
000564  eaffff7d          B        |L1.864|              ;375
                  |L1.1384|
000568  e3a00000          MOV      r0,#0                 ;377
00056c  e59f1328          LDR      r1,|L1.2204|          ;377
000570  e5911000          LDR      r1,[r1,#0]            ;377  ; OSTCBCur
000574  e581001c          STR      r0,[r1,#0x1c]         ;377
000578  ef000003          SVC      0x3  ; formerly SWI   ;378
00057c  e3a00000          MOV      r0,#0                 ;379
000580  e5c60000          STRB     r0,[r6,#0]            ;379
000584  eaffff75          B        |L1.864|
                          ENDP

                  OSMutexPost PROC
;;;399    INT8U  OSMutexPost (OS_EVENT *pevent)
;;;400    {
000588  e92d4070          PUSH     {r4-r6,lr}
00058c  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 ...                    */
000590  e59f0300          LDR      r0,|L1.2200|
000594  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000598  e3500000          CMP      r0,#0
00059c  da000002          BLE      |L1.1452|
;;;409            return (OS_ERR_POST_ISR);                     /* ... can't POST mutex from an ISR              */
0005a0  e3a00005          MOV      r0,#5
                  |L1.1444|
0005a4  e8bd4070          POP      {r4-r6,lr}
;;;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    }
0005a8  e12fff1e          BX       lr
                  |L1.1452|
0005ac  e3540000          CMP      r4,#0                 ;412
0005b0  1a000001          BNE      |L1.1468|             ;412
0005b4  e3a00004          MOV      r0,#4                 ;413
0005b8  eafffff9          B        |L1.1444|             ;413
                  |L1.1468|
0005bc  e5d40000          LDRB     r0,[r4,#0]            ;415
0005c0  e3500004          CMP      r0,#4                 ;415
0005c4  0a000001          BEQ      |L1.1488|             ;415
0005c8  e3a00001          MOV      r0,#1                 ;416
0005cc  eafffff4          B        |L1.1444|             ;416
                  |L1.1488|
0005d0  ef000002          SVC      0x2  ; formerly SWI   ;419
0005d4  e1d400b2          LDRH     r0,[r4,#2]            ;420
0005d8  e1a05440          ASR      r5,r0,#8              ;420
0005dc  e1d400b2          LDRH     r0,[r4,#2]            ;421
0005e0  e20060ff          AND      r6,r0,#0xff           ;421
0005e4  e59f02b0          LDR      r0,|L1.2204|          ;422
0005e8  e5900000          LDR      r0,[r0,#0]            ;422  ; OSTCBCur
0005ec  e5d0002d          LDRB     r0,[r0,#0x2d]         ;422
0005f0  e1500005          CMP      r0,r5                 ;422
0005f4  0a000007          BEQ      |L1.1560|             ;422
0005f8  e59f029c          LDR      r0,|L1.2204|          ;423
0005fc  e5900000          LDR      r0,[r0,#0]            ;423  ; OSTCBCur
000600  e5d0002d          LDRB     r0,[r0,#0x2d]         ;423
000604  e1500006          CMP      r0,r6                 ;423
000608  0a000002          BEQ      |L1.1560|             ;423
00060c  ef000003          SVC      0x3  ; formerly SWI   ;424
000610  e3a00078          MOV      r0,#0x78              ;425
000614  eaffffe2          B        |L1.1444|             ;425
                  |L1.1560|
000618  e59f027c          LDR      r0,|L1.2204|          ;427
00061c  e5900000          LDR      r0,[r0,#0]            ;427  ; OSTCBCur
000620  e5d0002d          LDRB     r0,[r0,#0x2d]         ;427
000624  e1500005          CMP      r0,r5                 ;427
000628  1a00004c          BNE      |L1.1888|             ;427
00062c  e59f0268          LDR      r0,|L1.2204|          ;430
000630  e5900000          LDR      r0,[r0,#0]            ;430  ; OSTCBCur
000634  e5d0002f          LDRB     r0,[r0,#0x2f]         ;430
000638  e59f1268          LDR      r1,|L1.2216|          ;430
00063c  e7d10000          LDRB     r0,[r1,r0]            ;430
000640  e59f1254          LDR      r1,|L1.2204|          ;430
000644  e5911000          LDR      r1,[r1,#0]            ;430  ; OSTCBCur

⌨️ 快捷键说明

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