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

📄 os_q.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 4 页
字号:
;;;569                    OS_EventTaskRdy(pevent, msg, OS_STAT_Q);
;;;570                }
;;;571            } else {
;;;572                OS_EventTaskRdy(pevent, msg, OS_STAT_Q);  /* No,  Post to HPT waiting on queue             */
;;;573            }
;;;574            OS_EXIT_CRITICAL();
;;;575            OS_Sched();                                   /* Find highest priority task ready to run       */
;;;576            return (OS_NO_ERR);
;;;577        }
;;;578        pq = (OS_Q *)pevent->OSEventPtr;                  /* Point to queue control block                  */
;;;579        if (pq->OSQEntries >= pq->OSQSize) {              /* Make sure queue is not full                   */
;;;580            OS_EXIT_CRITICAL();
;;;581            return (OS_Q_FULL);
;;;582        }
;;;583        if ((opt & OS_POST_OPT_FRONT) != 0x00) {          /* Do we post to the FRONT of the queue?         */
;;;584            if (pq->OSQOut == pq->OSQStart) {             /* Yes, Post as LIFO, Wrap OUT pointer if we ... */
;;;585                pq->OSQOut = pq->OSQEnd;                  /*      ... are at the 1st queue entry           */
;;;586            }
;;;587            pq->OSQOut--;
;;;588            *pq->OSQOut = msg;                            /*      Insert message into queue                */
;;;589        } else {                                          /* No,  Post as FIFO                             */
;;;590            *pq->OSQIn++ = msg;                           /*      Insert message into queue                */
;;;591            if (pq->OSQIn == pq->OSQEnd) {                /*      Wrap IN ptr if we are at end of queue    */
;;;592                pq->OSQIn = pq->OSQStart;
;;;593            }
;;;594        }
;;;595        pq->OSQEntries++;                                 /* Update the nbr of entries in the queue        */
;;;596        OS_EXIT_CRITICAL();
;;;597        return (OS_NO_ERR);
;;;598    }
00069c  e12fff1e          BX       lr
                  |L1.1696|
0006a0  e3550000          CMP      r5,#0                 ;558
0006a4  1a000001          BNE      |L1.1712|             ;558
0006a8  e3a00003          MOV      r0,#3                 ;559
0006ac  eafffff9          B        |L1.1688|             ;559
                  |L1.1712|
0006b0  e5d40000          LDRB     r0,[r4,#0]            ;561
0006b4  e3500002          CMP      r0,#2                 ;561
0006b8  0a000001          BEQ      |L1.1732|             ;561
0006bc  e3a00001          MOV      r0,#1                 ;562
0006c0  eafffff4          B        |L1.1688|             ;562
                  |L1.1732|
0006c4  ef000002          SVC      0x2  ; formerly SWI   ;565
0006c8  e5d40001          LDRB     r0,[r4,#1]            ;566
0006cc  e3500000          CMP      r0,#0                 ;566
0006d0  0a000012          BEQ      |L1.1824|             ;566
0006d4  e3170001          TST      r7,#1                 ;567
0006d8  0a000008          BEQ      |L1.1792|             ;567
0006dc  ea000003          B        |L1.1776|             ;568
                  |L1.1760|
0006e0  e3a02004          MOV      r2,#4                 ;569
0006e4  e1a01005          MOV      r1,r5                 ;569
0006e8  e1a00004          MOV      r0,r4                 ;569
0006ec  ebfffffe          BL       OS_EventTaskRdy       ;569
                  |L1.1776|
0006f0  e5d40001          LDRB     r0,[r4,#1]            ;568
0006f4  e3500000          CMP      r0,#0                 ;568
0006f8  1afffff8          BNE      |L1.1760|             ;568
0006fc  ea000003          B        |L1.1808|             ;568
                  |L1.1792|
000700  e3a02004          MOV      r2,#4                 ;572
000704  e1a01005          MOV      r1,r5                 ;572
000708  e1a00004          MOV      r0,r4                 ;572
00070c  ebfffffe          BL       OS_EventTaskRdy       ;572
                  |L1.1808|
000710  ef000003          SVC      0x3  ; formerly SWI   ;574
000714  ebfffffe          BL       OS_Sched              ;575
000718  e3a00000          MOV      r0,#0                 ;576
00071c  eaffffdd          B        |L1.1688|             ;576
                  |L1.1824|
000720  e5946004          LDR      r6,[r4,#4]            ;578
000724  e1d601b6          LDRH     r0,[r6,#0x16]         ;579
000728  e1d611b4          LDRH     r1,[r6,#0x14]         ;579
00072c  e1500001          CMP      r0,r1                 ;579
000730  ba000002          BLT      |L1.1856|             ;579
000734  ef000003          SVC      0x3  ; formerly SWI   ;580
000738  e3a0001e          MOV      r0,#0x1e              ;581
00073c  eaffffd5          B        |L1.1688|             ;581
                  |L1.1856|
000740  e3170002          TST      r7,#2                 ;583
000744  0a00000b          BEQ      |L1.1912|             ;583
000748  e5960010          LDR      r0,[r6,#0x10]         ;584
00074c  e5961004          LDR      r1,[r6,#4]            ;584
000750  e1500001          CMP      r0,r1                 ;584
000754  1a000001          BNE      |L1.1888|             ;584
000758  e5960008          LDR      r0,[r6,#8]            ;585
00075c  e5860010          STR      r0,[r6,#0x10]         ;585
                  |L1.1888|
000760  e5960010          LDR      r0,[r6,#0x10]         ;587
000764  e2400004          SUB      r0,r0,#4              ;587
000768  e5860010          STR      r0,[r6,#0x10]         ;587
00076c  e5960010          LDR      r0,[r6,#0x10]         ;588
000770  e5805000          STR      r5,[r0,#0]            ;588
000774  ea000009          B        |L1.1952|             ;588
                  |L1.1912|
000778  e596000c          LDR      r0,[r6,#0xc]          ;590
00077c  e2801004          ADD      r1,r0,#4              ;590
000780  e586100c          STR      r1,[r6,#0xc]          ;590
000784  e5805000          STR      r5,[r0,#0]            ;590
000788  e596000c          LDR      r0,[r6,#0xc]          ;591
00078c  e5961008          LDR      r1,[r6,#8]            ;591
000790  e1500001          CMP      r0,r1                 ;591
000794  1a000001          BNE      |L1.1952|             ;591
000798  e5960004          LDR      r0,[r6,#4]            ;592
00079c  e586000c          STR      r0,[r6,#0xc]          ;592
                  |L1.1952|
0007a0  e1d601b6          LDRH     r0,[r6,#0x16]         ;595
0007a4  e2800001          ADD      r0,r0,#1              ;595
0007a8  e3c00801          BIC      r0,r0,#0x10000        ;595
0007ac  e1c601b6          STRH     r0,[r6,#0x16]         ;595
0007b0  ef000003          SVC      0x3  ; formerly SWI   ;596
0007b4  e3a00000          MOV      r0,#0                 ;597
0007b8  eaffffb6          B        |L1.1688|             ;597
                          ENDP

                  OSQQuery PROC
;;;619    INT8U  OSQQuery (OS_EVENT *pevent, OS_Q_DATA *pdata)
;;;620    {
0007bc  e92d41f0          PUSH     {r4-r8,lr}
0007c0  e1a04000          MOV      r4,r0
0007c4  e1a05001          MOV      r5,r1
;;;621    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;622        OS_CPU_SR  cpu_sr;
;;;623    #endif
;;;624        OS_Q      *pq;
;;;625        INT8U     *psrc;
;;;626        INT8U     *pdest;
;;;627    
;;;628    
;;;629    #if OS_ARG_CHK_EN > 0
;;;630        if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                        */
0007c8  e3540000          CMP      r4,#0
0007cc  1a000002          BNE      |L1.2012|
;;;631            return (OS_ERR_PEVENT_NULL);
0007d0  e3a00004          MOV      r0,#4
                  |L1.2004|
0007d4  e8bd41f0          POP      {r4-r8,lr}
;;;632        }
;;;633        if (pevent->OSEventType != OS_EVENT_TYPE_Q) {          /* Validate event block type                */
;;;634            return (OS_ERR_EVENT_TYPE);
;;;635        }
;;;636    #endif
;;;637        OS_ENTER_CRITICAL();
;;;638        pdata->OSEventGrp = pevent->OSEventGrp;                /* Copy message queue wait list           */
;;;639        psrc              = &pevent->OSEventTbl[0];
;;;640        pdest             = &pdata->OSEventTbl[0];
;;;641    #if OS_EVENT_TBL_SIZE > 0
;;;642        *pdest++          = *psrc++;
;;;643    #endif
;;;644    
;;;645    #if OS_EVENT_TBL_SIZE > 1
;;;646        *pdest++          = *psrc++;
;;;647    #endif
;;;648    
;;;649    #if OS_EVENT_TBL_SIZE > 2
;;;650        *pdest++          = *psrc++;
;;;651    #endif
;;;652    
;;;653    #if OS_EVENT_TBL_SIZE > 3
;;;654        *pdest++          = *psrc++;
;;;655    #endif
;;;656    
;;;657    #if OS_EVENT_TBL_SIZE > 4
;;;658        *pdest++          = *psrc++;
;;;659    #endif
;;;660    
;;;661    #if OS_EVENT_TBL_SIZE > 5
;;;662        *pdest++          = *psrc++;
;;;663    #endif
;;;664    
;;;665    #if OS_EVENT_TBL_SIZE > 6
;;;666        *pdest++          = *psrc++;
;;;667    #endif
;;;668    
;;;669    #if OS_EVENT_TBL_SIZE > 7
;;;670        *pdest            = *psrc;
;;;671    #endif
;;;672        pq = (OS_Q *)pevent->OSEventPtr;
;;;673        if (pq->OSQEntries > 0) {
;;;674            pdata->OSMsg = *pq->OSQOut;                        /* Get next message to return if available  */
;;;675        } else {
;;;676            pdata->OSMsg = (void *)0;
;;;677        }
;;;678        pdata->OSNMsgs = pq->OSQEntries;
;;;679        pdata->OSQSize = pq->OSQSize;
;;;680        OS_EXIT_CRITICAL();
;;;681        return (OS_NO_ERR);
;;;682    }
0007d8  e12fff1e          BX       lr
                  |L1.2012|
0007dc  e5d40000          LDRB     r0,[r4,#0]            ;633
0007e0  e3500002          CMP      r0,#2                 ;633
0007e4  0a000001          BEQ      |L1.2032|             ;633
0007e8  e3a00001          MOV      r0,#1                 ;634
0007ec  eafffff8          B        |L1.2004|             ;634
                  |L1.2032|
0007f0  ef000002          SVC      0x2  ; formerly SWI   ;637
0007f4  e5d40001          LDRB     r0,[r4,#1]            ;638
0007f8  e5c5000a          STRB     r0,[r5,#0xa]          ;638
0007fc  e2847008          ADD      r7,r4,#8              ;639
000800  e2858008          ADD      r8,r5,#8              ;640
000804  e4d70001          LDRB     r0,[r7],#1            ;642
000808  e4c80001          STRB     r0,[r8],#1            ;642
00080c  e4d70001          LDRB     r0,[r7],#1            ;646
000810  e4c80001          STRB     r0,[r8],#1            ;646
000814  e5946004          LDR      r6,[r4,#4]            ;672
000818  e1d601b6          LDRH     r0,[r6,#0x16]         ;673
00081c  e3500000          CMP      r0,#0                 ;673
000820  da000003          BLE      |L1.2100|             ;673
000824  e5960010          LDR      r0,[r6,#0x10]         ;674
000828  e5900000          LDR      r0,[r0,#0]            ;674
00082c  e5850000          STR      r0,[r5,#0]            ;674
000830  ea000001          B        |L1.2108|             ;674
                  |L1.2100|
000834  e3a00000          MOV      r0,#0                 ;676
000838  e5850000          STR      r0,[r5,#0]            ;676
                  |L1.2108|
00083c  e1d601b6          LDRH     r0,[r6,#0x16]         ;678
000840  e1c500b4          STRH     r0,[r5,#4]            ;678
000844  e1d601b4          LDRH     r0,[r6,#0x14]         ;679
000848  e1c500b6          STRH     r0,[r5,#6]            ;679
00084c  ef000003          SVC      0x3  ; formerly SWI   ;680
000850  e3a00000          MOV      r0,#0                 ;681
000854  eaffffde          B        |L1.2004|             ;681
                          ENDP

                  OS_QInit PROC
;;;713    
;;;714        pq1 = &OSQTbl[0];
000858  e59f204c          LDR      r2,|L1.2220|
;;;715        pq2 = &OSQTbl[1];
00085c  e2821018          ADD      r1,r2,#0x18
;;;716        for (i = 0; i < (OS_MAX_QS - 1); i++) {      /* Init. list of free QUEUE control blocks            */
000860  e3a00000          MOV      r0,#0
000864  ea000004          B        |L1.2172|
;;;717            pq1->OSQPtr = pq2;
                  |L1.2152|
000868  e5821000          STR      r1,[r2,#0]
;;;718            pq1++;
00086c  e2822018          ADD      r2,r2,#0x18
;;;719            pq2++;
000870  e2811018          ADD      r1,r1,#0x18
000874  e2803001          ADD      r3,r0,#1              ;716
000878  e3c30801          BIC      r0,r3,#0x10000        ;716
                  |L1.2172|
00087c  e3500001          CMP      r0,#1                 ;716
000880  bafffff8          BLT      |L1.2152|             ;716
;;;720        }
;;;721        pq1->OSQPtr = (OS_Q *)0;
000884  e3a03000          MOV      r3,#0
000888  e5823000          STR      r3,[r2,#0]
;;;722        OSQFreeList = &OSQTbl[0];
00088c  e59f3018          LDR      r3,|L1.2220|
000890  e59fc00c          LDR      r12,|L1.2212|
000894  e58c3000          STR      r3,[r12,#0]  ; OSQFreeList
;;;723    #endif
;;;724    }
000898  e12fff1e          BX       lr
                  |L1.2204|
00089c  00000000          DCD      OSIntNesting
                  |L1.2208|
0008a0  00000000          DCD      OSEventFreeList
                  |L1.2212|
0008a4  00000000          DCD      OSQFreeList
                  |L1.2216|
0008a8  00000000          DCD      OSTCBCur
                  |L1.2220|
0008ac  00000000          DCD      OSQTbl
                          ENDP


⌨️ 快捷键说明

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