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

📄 os_q.txt

📁 在KEIL下成功使用UCOS-II嵌入式操作系统
💻 TXT
📖 第 1 页 / 共 4 页
字号:
000438  e5900000          LDR      r0,[r0,#0]            ;361  ; OSTCBCur
00043c  e1c051ba          STRH     r5,[r0,#0x1a]         ;361
000440  e1a00004          MOV      r0,r4                 ;362
000444  ebfffffe          BL       OS_EventTaskWait      ;362
000448  ef000003          SVC      0x3  ; formerly SWI   ;363
00044c  ebfffffe          BL       OS_Sched              ;364
000450  ef000002          SVC      0x2  ; formerly SWI   ;365
000454  e59f0430          LDR      r0,|L1.2188|          ;366
000458  e5900000          LDR      r0,[r0,#0]            ;366  ; OSTCBCur
00045c  e5908010          LDR      r8,[r0,#0x10]         ;366
000460  e3580000          CMP      r8,#0                 ;367
000464  0a00000e          BEQ      |L1.1188|             ;367
000468  e3a00000          MOV      r0,#0                 ;368
00046c  e59f1418          LDR      r1,|L1.2188|          ;368
000470  e5911000          LDR      r1,[r1,#0]            ;368  ; OSTCBCur
000474  e5810010          STR      r0,[r1,#0x10]         ;368
000478  e59f140c          LDR      r1,|L1.2188|          ;369
00047c  e5911000          LDR      r1,[r1,#0]            ;369  ; OSTCBCur
000480  e5c1001c          STRB     r0,[r1,#0x1c]         ;369
000484  e59f1400          LDR      r1,|L1.2188|          ;370
000488  e5911000          LDR      r1,[r1,#0]            ;370  ; OSTCBCur
00048c  e581000c          STR      r0,[r1,#0xc]          ;370
000490  ef000003          SVC      0x3  ; formerly SWI   ;371
000494  e3a00000          MOV      r0,#0                 ;372
000498  e5c60000          STRB     r0,[r6,#0]            ;372
00049c  e1a00008          MOV      r0,r8                 ;373
0004a0  eaffffb7          B        |L1.900|              ;373
                  |L1.1188|
0004a4  e1a00004          MOV      r0,r4                 ;375
0004a8  ebfffffe          BL       OS_EventTO            ;375
0004ac  ef000003          SVC      0x3  ; formerly SWI   ;376
0004b0  e3a0000a          MOV      r0,#0xa               ;377
0004b4  e5c60000          STRB     r0,[r6,#0]            ;377
0004b8  e3a00000          MOV      r0,#0                 ;378
0004bc  eaffffb0          B        |L1.900|              ;378
                          ENDP

                  OSQPost PROC
;;;400    INT8U  OSQPost (OS_EVENT *pevent, void *msg)
;;;401    {
0004c0  e92d4070          PUSH     {r4-r6,lr}
0004c4  e1a04000          MOV      r4,r0
0004c8  e1a06001          MOV      r6,r1
;;;402    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;403        OS_CPU_SR  cpu_sr;
;;;404    #endif    
;;;405        OS_Q      *pq;
;;;406    
;;;407    
;;;408    #if OS_ARG_CHK_EN > 0
;;;409        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
0004cc  e3540000          CMP      r4,#0
0004d0  1a000001          BNE      |L1.1244|
;;;410            return (OS_ERR_PEVENT_NULL);
0004d4  e3a00004          MOV      r0,#4
;;;411        }
;;;412        if (msg == (void *)0) {                           /* Make sure we are not posting a NULL pointer   */
;;;413            return (OS_ERR_POST_NULL_PTR);
;;;414        }
;;;415        if (pevent->OSEventType != OS_EVENT_TYPE_Q) {     /* Validate event block type                     */
;;;416            return (OS_ERR_EVENT_TYPE);
;;;417        }
;;;418    #endif
;;;419        OS_ENTER_CRITICAL();
;;;420        if (pevent->OSEventGrp != 0x00) {                 /* See if any task pending on queue              */
;;;421            OS_EventTaskRdy(pevent, msg, OS_STAT_Q);      /* Ready highest priority task waiting on event  */
;;;422            OS_EXIT_CRITICAL();
;;;423            OS_Sched();                                   /* Find highest priority task ready to run       */
;;;424            return (OS_NO_ERR);
;;;425        }
;;;426        pq = (OS_Q *)pevent->OSEventPtr;                  /* Point to queue control block                  */
;;;427        if (pq->OSQEntries >= pq->OSQSize) {              /* Make sure queue is not full                   */
;;;428            OS_EXIT_CRITICAL();
;;;429            return (OS_Q_FULL);
;;;430        }
;;;431        *pq->OSQIn++ = msg;                               /* Insert message into queue                     */
;;;432        pq->OSQEntries++;                                 /* Update the nbr of entries in the queue        */
;;;433        if (pq->OSQIn == pq->OSQEnd) {                    /* Wrap IN ptr if we are at end of queue         */
;;;434            pq->OSQIn = pq->OSQStart;
;;;435        }
;;;436        OS_EXIT_CRITICAL();
;;;437        return (OS_NO_ERR);
;;;438    }
                  |L1.1240|
0004d8  e8bd8070          POP      {r4-r6,pc}
                  |L1.1244|
0004dc  e3560000          CMP      r6,#0                 ;412
0004e0  1a000001          BNE      |L1.1260|             ;412
0004e4  e3a00003          MOV      r0,#3                 ;413
0004e8  eafffffa          B        |L1.1240|             ;413
                  |L1.1260|
0004ec  e5d40000          LDRB     r0,[r4,#0]            ;415
0004f0  e3500002          CMP      r0,#2                 ;415
0004f4  0a000001          BEQ      |L1.1280|             ;415
0004f8  e3a00001          MOV      r0,#1                 ;416
0004fc  eafffff5          B        |L1.1240|             ;416
                  |L1.1280|
000500  ef000002          SVC      0x2  ; formerly SWI   ;419
000504  e5d40001          LDRB     r0,[r4,#1]            ;420
000508  e3500000          CMP      r0,#0                 ;420
00050c  0a000007          BEQ      |L1.1328|             ;420
000510  e3a02004          MOV      r2,#4                 ;421
000514  e1a01006          MOV      r1,r6                 ;421
000518  e1a00004          MOV      r0,r4                 ;421
00051c  ebfffffe          BL       OS_EventTaskRdy       ;421
000520  ef000003          SVC      0x3  ; formerly SWI   ;422
000524  ebfffffe          BL       OS_Sched              ;423
000528  e3a00000          MOV      r0,#0                 ;424
00052c  eaffffe9          B        |L1.1240|             ;424
                  |L1.1328|
000530  e5945004          LDR      r5,[r4,#4]            ;426
000534  e1d501b6          LDRH     r0,[r5,#0x16]         ;427
000538  e1d511b4          LDRH     r1,[r5,#0x14]         ;427
00053c  e1500001          CMP      r0,r1                 ;427
000540  ba000002          BLT      |L1.1360|             ;427
000544  ef000003          SVC      0x3  ; formerly SWI   ;428
000548  e3a0001e          MOV      r0,#0x1e              ;429
00054c  eaffffe1          B        |L1.1240|             ;429
                  |L1.1360|
000550  e595000c          LDR      r0,[r5,#0xc]          ;431
000554  e2801004          ADD      r1,r0,#4              ;431
000558  e585100c          STR      r1,[r5,#0xc]          ;431
00055c  e5806000          STR      r6,[r0,#0]            ;431
000560  e1d501b6          LDRH     r0,[r5,#0x16]         ;432
000564  e2800001          ADD      r0,r0,#1              ;432
000568  e3c00801          BIC      r0,r0,#0x10000        ;432
00056c  e1c501b6          STRH     r0,[r5,#0x16]         ;432
000570  e595000c          LDR      r0,[r5,#0xc]          ;433
000574  e5951008          LDR      r1,[r5,#8]            ;433
000578  e1500001          CMP      r0,r1                 ;433
00057c  1a000001          BNE      |L1.1416|             ;433
000580  e5950004          LDR      r0,[r5,#4]            ;434
000584  e585000c          STR      r0,[r5,#0xc]          ;434
                  |L1.1416|
000588  ef000003          SVC      0x3  ; formerly SWI   ;436
00058c  e3a00000          MOV      r0,#0                 ;437
000590  eaffffd0          B        |L1.1240|             ;437
                          ENDP

                  OSQPostFront PROC
;;;462    INT8U  OSQPostFront (OS_EVENT *pevent, void *msg)
;;;463    {
000594  e92d4070          PUSH     {r4-r6,lr}
000598  e1a04000          MOV      r4,r0
00059c  e1a06001          MOV      r6,r1
;;;464    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;465        OS_CPU_SR  cpu_sr;
;;;466    #endif    
;;;467        OS_Q      *pq;
;;;468    
;;;469    
;;;470    #if OS_ARG_CHK_EN > 0
;;;471        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
0005a0  e3540000          CMP      r4,#0
0005a4  1a000001          BNE      |L1.1456|
;;;472            return (OS_ERR_PEVENT_NULL);
0005a8  e3a00004          MOV      r0,#4
;;;473        }
;;;474        if (msg == (void *)0) {                           /* Make sure we are not posting a NULL pointer   */
;;;475            return (OS_ERR_POST_NULL_PTR);
;;;476        }
;;;477        if (pevent->OSEventType != OS_EVENT_TYPE_Q) {     /* Validate event block type                     */
;;;478            return (OS_ERR_EVENT_TYPE);
;;;479        }
;;;480    #endif
;;;481        OS_ENTER_CRITICAL();
;;;482        if (pevent->OSEventGrp != 0x00) {                 /* See if any task pending on queue              */
;;;483            OS_EventTaskRdy(pevent, msg, OS_STAT_Q);      /* Ready highest priority task waiting on event  */
;;;484            OS_EXIT_CRITICAL();
;;;485            OS_Sched();                                   /* Find highest priority task ready to run       */
;;;486            return (OS_NO_ERR);
;;;487        }
;;;488        pq = (OS_Q *)pevent->OSEventPtr;                  /* Point to queue control block                  */
;;;489        if (pq->OSQEntries >= pq->OSQSize) {              /* Make sure queue is not full                   */
;;;490            OS_EXIT_CRITICAL();
;;;491            return (OS_Q_FULL);
;;;492        }
;;;493        if (pq->OSQOut == pq->OSQStart) {                 /* Wrap OUT ptr if we are at the 1st queue entry */
;;;494            pq->OSQOut = pq->OSQEnd;
;;;495        }
;;;496        pq->OSQOut--;
;;;497        *pq->OSQOut = msg;                                /* Insert message into queue                     */
;;;498        pq->OSQEntries++;                                 /* Update the nbr of entries in the queue        */
;;;499        OS_EXIT_CRITICAL();
;;;500        return (OS_NO_ERR);
;;;501    }
                  |L1.1452|
0005ac  e8bd8070          POP      {r4-r6,pc}
                  |L1.1456|
0005b0  e3560000          CMP      r6,#0                 ;474
0005b4  1a000001          BNE      |L1.1472|             ;474
0005b8  e3a00003          MOV      r0,#3                 ;475
0005bc  eafffffa          B        |L1.1452|             ;475
                  |L1.1472|
0005c0  e5d40000          LDRB     r0,[r4,#0]            ;477
0005c4  e3500002          CMP      r0,#2                 ;477
0005c8  0a000001          BEQ      |L1.1492|             ;477
0005cc  e3a00001          MOV      r0,#1                 ;478
0005d0  eafffff5          B        |L1.1452|             ;478
                  |L1.1492|
0005d4  ef000002          SVC      0x2  ; formerly SWI   ;481
0005d8  e5d40001          LDRB     r0,[r4,#1]            ;482
0005dc  e3500000          CMP      r0,#0                 ;482
0005e0  0a000007          BEQ      |L1.1540|             ;482
0005e4  e3a02004          MOV      r2,#4                 ;483
0005e8  e1a01006          MOV      r1,r6                 ;483
0005ec  e1a00004          MOV      r0,r4                 ;483
0005f0  ebfffffe          BL       OS_EventTaskRdy       ;483
0005f4  ef000003          SVC      0x3  ; formerly SWI   ;484
0005f8  ebfffffe          BL       OS_Sched              ;485
0005fc  e3a00000          MOV      r0,#0                 ;486
000600  eaffffe9          B        |L1.1452|             ;486
                  |L1.1540|
000604  e5945004          LDR      r5,[r4,#4]            ;488
000608  e1d501b6          LDRH     r0,[r5,#0x16]         ;489
00060c  e1d511b4          LDRH     r1,[r5,#0x14]         ;489
000610  e1500001          CMP      r0,r1                 ;489
000614  ba000002          BLT      |L1.1572|             ;489
000618  ef000003          SVC      0x3  ; formerly SWI   ;490
00061c  e3a0001e          MOV      r0,#0x1e              ;491
000620  eaffffe1          B        |L1.1452|             ;491
                  |L1.1572|
000624  e5950010          LDR      r0,[r5,#0x10]         ;493
000628  e5951004          LDR      r1,[r5,#4]            ;493
00062c  e1500001          CMP      r0,r1                 ;493
000630  1a000001          BNE      |L1.1596|             ;493
000634  e5950008          LDR      r0,[r5,#8]            ;494
000638  e5850010          STR      r0,[r5,#0x10]         ;494
                  |L1.1596|
00063c  e5950010          LDR      r0,[r5,#0x10]         ;496
000640  e2400004          SUB      r0,r0,#4              ;496
000644  e5850010          STR      r0,[r5,#0x10]         ;496
000648  e5950010          LDR      r0,[r5,#0x10]         ;497
00064c  e5806000          STR      r6,[r0,#0]            ;497
000650  e1d501b6          LDRH     r0,[r5,#0x16]         ;498
000654  e2800001          ADD      r0,r0,#1              ;498
000658  e3c00801          BIC      r0,r0,#0x10000        ;498
00065c  e1c501b6          STRH     r0,[r5,#0x16]         ;498
000660  ef000003          SVC      0x3  ; formerly SWI   ;499
000664  e3a00000          MOV      r0,#0                 ;500
000668  eaffffcf          B        |L1.1452|             ;500
                          ENDP

                  OSQPostOpt PROC
;;;548    INT8U  OSQPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)
;;;549    {
00066c  e92d41f0          PUSH     {r4-r8,lr}
000670  e1a04000          MOV      r4,r0
000674  e1a05001          MOV      r5,r1
000678  e1a07002          MOV      r7,r2
;;;550    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;551        OS_CPU_SR  cpu_sr;
;;;552    #endif    
;;;553        OS_Q      *pq;
;;;554    
;;;555    
;;;556    #if OS_ARG_CHK_EN > 0
;;;557        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
00067c  e3540000          CMP      r4,#0
000680  1a000001          BNE      |L1.1676|
;;;558            return (OS_ERR_PEVENT_NULL);
000684  e3a00004          MOV      r0,#4
;;;559        }
;;;560        if (msg == (void *)0) {                           /* Make sure we are not posting a NULL pointer   */
;;;561            return (OS_ERR_POST_NULL_PTR);
;;;562        }
;;;563        if (pevent->OSEventType != OS_EVENT_TYPE_Q) {     /* Validate event block type                     */
;;;564            return (OS_ERR_EVENT_TYPE);
;;;565        }
;;;566    #endif
;;;567        OS_ENTER_CRITICAL();
;;;568        if (pevent->OSEventGrp != 0x00) {                 /* See if any task pending on queue              */
;;;569            if ((opt & OS_POST_OPT_BROADCAST) != 0x00) {  /* Do we need to post msg to ALL waiting tasks ? */
;;;570                while (pevent->OSEventGrp != 0x00) {      /* Yes, Post to ALL tasks waiting on queue       */           

⌨️ 快捷键说明

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