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

📄 os_q.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 4 页
字号:
00044c  ebfffffe          BL       OS_EventTaskWait      ;360
000450  ef000003          SVC      0x3  ; formerly SWI   ;361
000454  ebfffffe          BL       OS_Sched              ;362
000458  ef000002          SVC      0x2  ; formerly SWI   ;363
00045c  e59f0444          LDR      r0,|L1.2216|          ;364
000460  e5900000          LDR      r0,[r0,#0]            ;364  ; OSTCBCur
000464  e5908020          LDR      r8,[r0,#0x20]         ;364
000468  e3580000          CMP      r8,#0                 ;365
00046c  0a00000e          BEQ      |L1.1196|             ;365
000470  e3a00000          MOV      r0,#0                 ;366
000474  e59f142c          LDR      r1,|L1.2216|          ;366
000478  e5911000          LDR      r1,[r1,#0]            ;366  ; OSTCBCur
00047c  e5810020          STR      r0,[r1,#0x20]         ;366
000480  e59f1420          LDR      r1,|L1.2216|          ;367
000484  e5911000          LDR      r1,[r1,#0]            ;367  ; OSTCBCur
000488  e5c1002c          STRB     r0,[r1,#0x2c]         ;367
00048c  e59f1414          LDR      r1,|L1.2216|          ;368
000490  e5911000          LDR      r1,[r1,#0]            ;368  ; OSTCBCur
000494  e581001c          STR      r0,[r1,#0x1c]         ;368
000498  ef000003          SVC      0x3  ; formerly SWI   ;369
00049c  e3a00000          MOV      r0,#0                 ;370
0004a0  e5c60000          STRB     r0,[r6,#0]            ;370
0004a4  e1a00008          MOV      r0,r8                 ;371
0004a8  eaffffb6          B        |L1.904|              ;371
                  |L1.1196|
0004ac  e1a00004          MOV      r0,r4                 ;373
0004b0  ebfffffe          BL       OS_EventTO            ;373
0004b4  ef000003          SVC      0x3  ; formerly SWI   ;374
0004b8  e3a0000a          MOV      r0,#0xa               ;375
0004bc  e5c60000          STRB     r0,[r6,#0]            ;375
0004c0  e3a00000          MOV      r0,#0                 ;376
0004c4  eaffffaf          B        |L1.904|              ;376
                          ENDP

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

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

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

⌨️ 快捷键说明

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