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

📄 os_q.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 4 页
字号:
0001a8  e12fff1e          BX       lr
                  |L1.428|
0001ac  e3540000          CMP      r4,#0                 ;191
0001b0  1a000003          BNE      |L1.452|              ;191
0001b4  e3a00004          MOV      r0,#4                 ;192
0001b8  e5c60000          STRB     r0,[r6,#0]            ;192
0001bc  e1a00004          MOV      r0,r4                 ;193
0001c0  eafffff7          B        |L1.420|              ;193
                  |L1.452|
0001c4  e5d40000          LDRB     r0,[r4,#0]            ;195
0001c8  e3500002          CMP      r0,#2                 ;195
0001cc  0a000003          BEQ      |L1.480|              ;195
0001d0  e3a00001          MOV      r0,#1                 ;196
0001d4  e5c60000          STRB     r0,[r6,#0]            ;196
0001d8  e1a00004          MOV      r0,r4                 ;197
0001dc  eafffff0          B        |L1.420|              ;197
                  |L1.480|
0001e0  ef000002          SVC      0x2  ; formerly SWI   ;200
0001e4  e5d40001          LDRB     r0,[r4,#1]            ;201
0001e8  e3500000          CMP      r0,#0                 ;201
0001ec  0a000001          BEQ      |L1.504|              ;201
0001f0  e3a08001          MOV      r8,#1                 ;202
0001f4  ea000000          B        |L1.508|              ;202
                  |L1.504|
0001f8  e3a08000          MOV      r8,#0                 ;204
                  |L1.508|
0001fc  e3550000          CMP      r5,#0                 ;206
000200  0a000002          BEQ      |L1.528|              ;206
000204  e3550001          CMP      r5,#1                 ;206
000208  1a000036          BNE      |L1.744|              ;206
00020c  ea000018          B        |L1.628|              ;206
                  |L1.528|
000210  e1a00000          MOV      r0,r0                 ;207
000214  e3580000          CMP      r8,#0                 ;208
000218  1a000010          BNE      |L1.608|              ;208
00021c  e5947004          LDR      r7,[r4,#4]            ;209
000220  e59f067c          LDR      r0,|L1.2212|          ;210
000224  e5900000          LDR      r0,[r0,#0]            ;210  ; OSQFreeList
000228  e5870000          STR      r0,[r7,#0]            ;210
00022c  e59f0670          LDR      r0,|L1.2212|          ;211
000230  e5807000          STR      r7,[r0,#0]            ;211  ; OSQFreeList
000234  e3a00000          MOV      r0,#0                 ;212
000238  e5c40000          STRB     r0,[r4,#0]            ;212
00023c  e59f065c          LDR      r0,|L1.2208|          ;213
000240  e5900000          LDR      r0,[r0,#0]            ;213  ; OSEventFreeList
000244  e5840004          STR      r0,[r4,#4]            ;213
000248  e59f0650          LDR      r0,|L1.2208|          ;214
00024c  e5804000          STR      r4,[r0,#0]            ;214  ; OSEventFreeList
000250  ef000003          SVC      0x3  ; formerly SWI   ;215
000254  e3a00000          MOV      r0,#0                 ;216
000258  e5c60000          STRB     r0,[r6,#0]            ;216
00025c  eaffffd0          B        |L1.420|              ;217
                  |L1.608|
000260  ef000003          SVC      0x3  ; formerly SWI   ;219
000264  e3a00008          MOV      r0,#8                 ;220
000268  e5c60000          STRB     r0,[r6,#0]            ;220
00026c  e1a00004          MOV      r0,r4                 ;221
000270  eaffffcb          B        |L1.420|              ;221
                  |L1.628|
000274  e1a00000          MOV      r0,r0                 ;224
000278  ea000003          B        |L1.652|              ;225
                  |L1.636|
00027c  e3a02004          MOV      r2,#4                 ;226
000280  e3a01000          MOV      r1,#0                 ;226
000284  e1a00004          MOV      r0,r4                 ;226
000288  ebfffffe          BL       OS_EventTaskRdy       ;226
                  |L1.652|
00028c  e5d40001          LDRB     r0,[r4,#1]            ;225
000290  e3500000          CMP      r0,#0                 ;225
000294  1afffff8          BNE      |L1.636|              ;225
000298  e5947004          LDR      r7,[r4,#4]            ;228
00029c  e59f0600          LDR      r0,|L1.2212|          ;229
0002a0  e5900000          LDR      r0,[r0,#0]            ;229  ; OSQFreeList
0002a4  e5870000          STR      r0,[r7,#0]            ;229
0002a8  e59f05f4          LDR      r0,|L1.2212|          ;230
0002ac  e5807000          STR      r7,[r0,#0]            ;230  ; OSQFreeList
0002b0  e3a00000          MOV      r0,#0                 ;231
0002b4  e5c40000          STRB     r0,[r4,#0]            ;231
0002b8  e59f05e0          LDR      r0,|L1.2208|          ;232
0002bc  e5900000          LDR      r0,[r0,#0]            ;232  ; OSEventFreeList
0002c0  e5840004          STR      r0,[r4,#4]            ;232
0002c4  e59f05d4          LDR      r0,|L1.2208|          ;233
0002c8  e5804000          STR      r4,[r0,#0]            ;233  ; OSEventFreeList
0002cc  ef000003          SVC      0x3  ; formerly SWI   ;234
0002d0  e3580001          CMP      r8,#1                 ;235
0002d4  1a000000          BNE      |L1.732|              ;235
0002d8  ebfffffe          BL       OS_Sched              ;236
                  |L1.732|
0002dc  e3a00000          MOV      r0,#0                 ;238
0002e0  e5c60000          STRB     r0,[r6,#0]            ;238
0002e4  eaffffae          B        |L1.420|              ;239
                  |L1.744|
0002e8  e1a00000          MOV      r0,r0                 ;241
0002ec  ef000003          SVC      0x3  ; formerly SWI   ;242
0002f0  e3a00007          MOV      r0,#7                 ;243
0002f4  e5c60000          STRB     r0,[r6,#0]            ;243
0002f8  e1a00004          MOV      r0,r4                 ;244
0002fc  eaffffa8          B        |L1.420|              ;244
                          ENDP

                  OSQFlush PROC
;;;265    INT8U  OSQFlush (OS_EVENT *pevent)
;;;266    {
000300  e92d4070          PUSH     {r4-r6,lr}
000304  e1a05000          MOV      r5,r0
;;;267    #if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
;;;268        OS_CPU_SR  cpu_sr;
;;;269    #endif
;;;270        OS_Q      *pq;
;;;271    
;;;272    
;;;273    #if OS_ARG_CHK_EN > 0
;;;274        if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
000308  e3550000          CMP      r5,#0
00030c  1a000002          BNE      |L1.796|
;;;275            return (OS_ERR_PEVENT_NULL);
000310  e3a00004          MOV      r0,#4
                  |L1.788|
000314  e8bd4070          POP      {r4-r6,lr}
;;;276        }
;;;277        if (pevent->OSEventType != OS_EVENT_TYPE_Q) {     /* Validate event block type                     */
;;;278            return (OS_ERR_EVENT_TYPE);
;;;279        }
;;;280    #endif
;;;281        OS_ENTER_CRITICAL();
;;;282        pq             = (OS_Q *)pevent->OSEventPtr;      /* Point to queue storage structure              */
;;;283        pq->OSQIn      = pq->OSQStart;
;;;284        pq->OSQOut     = pq->OSQStart;
;;;285        pq->OSQEntries = 0;
;;;286        OS_EXIT_CRITICAL();
;;;287        return (OS_NO_ERR);
;;;288    }
000318  e12fff1e          BX       lr
                  |L1.796|
00031c  e5d50000          LDRB     r0,[r5,#0]            ;277
000320  e3500002          CMP      r0,#2                 ;277
000324  0a000001          BEQ      |L1.816|              ;277
000328  e3a00001          MOV      r0,#1                 ;278
00032c  eafffff8          B        |L1.788|              ;278
                  |L1.816|
000330  ef000002          SVC      0x2  ; formerly SWI   ;281
000334  e5954004          LDR      r4,[r5,#4]            ;282
000338  e5940004          LDR      r0,[r4,#4]            ;283
00033c  e584000c          STR      r0,[r4,#0xc]          ;283
000340  e5940004          LDR      r0,[r4,#4]            ;284
000344  e5840010          STR      r0,[r4,#0x10]         ;284
000348  e3a00000          MOV      r0,#0                 ;285
00034c  e1c401b6          STRH     r0,[r4,#0x16]         ;285
000350  ef000003          SVC      0x3  ; formerly SWI   ;286
000354  e3a00000          MOV      r0,#0                 ;287
000358  eaffffed          B        |L1.788|              ;287
                          ENDP

                  OSQPend PROC
;;;323    void  *OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
;;;324    {
00035c  e92d41f0          PUSH     {r4-r8,lr}
000360  e1a04000          MOV      r4,r0
000364  e1a05001          MOV      r5,r1
000368  e1a06002          MOV      r6,r2
;;;325    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;326        OS_CPU_SR  cpu_sr;
;;;327    #endif
;;;328        void      *msg;
;;;329        OS_Q      *pq;
;;;330    
;;;331    
;;;332        if (OSIntNesting > 0) {                      /* See if called from ISR ...                         */
00036c  e59f0528          LDR      r0,|L1.2204|
000370  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000374  e3500000          CMP      r0,#0
000378  da000004          BLE      |L1.912|
;;;333            *err = OS_ERR_PEND_ISR;                  /* ... can't PEND from an ISR                         */
00037c  e3a00002          MOV      r0,#2
000380  e5c60000          STRB     r0,[r6,#0]
;;;334            return ((void *)0);
000384  e3a00000          MOV      r0,#0
                  |L1.904|
000388  e8bd41f0          POP      {r4-r8,lr}
;;;335        }
;;;336    #if OS_ARG_CHK_EN > 0
;;;337        if (pevent == (OS_EVENT *)0) {               /* Validate 'pevent'                                  */
;;;338            *err = OS_ERR_PEVENT_NULL;
;;;339            return ((void *)0);
;;;340        }
;;;341        if (pevent->OSEventType != OS_EVENT_TYPE_Q) {/* Validate event block type                          */
;;;342            *err = OS_ERR_EVENT_TYPE;
;;;343            return ((void *)0);
;;;344        }
;;;345    #endif
;;;346        OS_ENTER_CRITICAL();
;;;347        pq = (OS_Q *)pevent->OSEventPtr;             /* Point at queue control block                       */
;;;348        if (pq->OSQEntries > 0) {                    /* See if any messages in the queue                   */
;;;349            msg = *pq->OSQOut++;                     /* Yes, extract oldest message from the queue         */
;;;350            pq->OSQEntries--;                        /* Update the number of entries in the queue          */
;;;351            if (pq->OSQOut == pq->OSQEnd) {          /* Wrap OUT pointer if we are at the end of the queue */
;;;352                pq->OSQOut = pq->OSQStart;
;;;353            }
;;;354            OS_EXIT_CRITICAL();
;;;355            *err = OS_NO_ERR;
;;;356            return (msg);                            /* Return message received                            */
;;;357        }
;;;358        OSTCBCur->OSTCBStat |= OS_STAT_Q;            /* Task will have to pend for a message to be posted  */
;;;359        OSTCBCur->OSTCBDly   = timeout;              /* Load timeout into TCB                              */
;;;360        OS_EventTaskWait(pevent);                    /* Suspend task until event or timeout occurs         */
;;;361        OS_EXIT_CRITICAL();
;;;362        OS_Sched();                                  /* Find next highest priority task ready to run       */
;;;363        OS_ENTER_CRITICAL();
;;;364        msg = OSTCBCur->OSTCBMsg;
;;;365        if (msg != (void *)0) {                      /* Did we get a message?                              */
;;;366            OSTCBCur->OSTCBMsg      = (void *)0;     /* Extract message from TCB (Put there by QPost)      */
;;;367            OSTCBCur->OSTCBStat     = OS_STAT_RDY;
;;;368            OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* No longer waiting for event                        */
;;;369            OS_EXIT_CRITICAL();
;;;370            *err                    = OS_NO_ERR;
;;;371            return (msg);                            /* Return message received                            */
;;;372        }
;;;373        OS_EventTO(pevent);                          /* Timed out                                          */
;;;374        OS_EXIT_CRITICAL();
;;;375        *err = OS_TIMEOUT;                           /* Indicate a timeout occured                         */
;;;376        return ((void *)0);                          /* No message received                                */
;;;377    }
00038c  e12fff1e          BX       lr
                  |L1.912|
000390  e3540000          CMP      r4,#0                 ;337
000394  1a000003          BNE      |L1.936|              ;337
000398  e3a00004          MOV      r0,#4                 ;338
00039c  e5c60000          STRB     r0,[r6,#0]            ;338
0003a0  e3a00000          MOV      r0,#0                 ;339
0003a4  eafffff7          B        |L1.904|              ;339
                  |L1.936|
0003a8  e5d40000          LDRB     r0,[r4,#0]            ;341
0003ac  e3500002          CMP      r0,#2                 ;341
0003b0  0a000003          BEQ      |L1.964|              ;341
0003b4  e3a00001          MOV      r0,#1                 ;342
0003b8  e5c60000          STRB     r0,[r6,#0]            ;342
0003bc  e3a00000          MOV      r0,#0                 ;343
0003c0  eafffff0          B        |L1.904|              ;343
                  |L1.964|
0003c4  ef000002          SVC      0x2  ; formerly SWI   ;346
0003c8  e5947004          LDR      r7,[r4,#4]            ;347
0003cc  e1d701b6          LDRH     r0,[r7,#0x16]         ;348
0003d0  e3500000          CMP      r0,#0                 ;348
0003d4  da000011          BLE      |L1.1056|             ;348
0003d8  e5970010          LDR      r0,[r7,#0x10]         ;349
0003dc  e2801004          ADD      r1,r0,#4              ;349
0003e0  e5871010          STR      r1,[r7,#0x10]         ;349
0003e4  e5908000          LDR      r8,[r0,#0]            ;349
0003e8  e1d701b6          LDRH     r0,[r7,#0x16]         ;350
0003ec  e2400001          SUB      r0,r0,#1              ;350
0003f0  e1c701b6          STRH     r0,[r7,#0x16]         ;350
0003f4  e5970010          LDR      r0,[r7,#0x10]         ;351
0003f8  e5971008          LDR      r1,[r7,#8]            ;351
0003fc  e1500001          CMP      r0,r1                 ;351
000400  1a000001          BNE      |L1.1036|             ;351
000404  e5970004          LDR      r0,[r7,#4]            ;352
000408  e5870010          STR      r0,[r7,#0x10]         ;352
                  |L1.1036|
00040c  ef000003          SVC      0x3  ; formerly SWI   ;354
000410  e3a00000          MOV      r0,#0                 ;355
000414  e5c60000          STRB     r0,[r6,#0]            ;355
000418  e1a00008          MOV      r0,r8                 ;356
00041c  eaffffd9          B        |L1.904|              ;356
                  |L1.1056|
000420  e59f0480          LDR      r0,|L1.2216|          ;358
000424  e5900000          LDR      r0,[r0,#0]            ;358  ; OSTCBCur
000428  e5d0002c          LDRB     r0,[r0,#0x2c]         ;358
00042c  e3800004          ORR      r0,r0,#4              ;358
000430  e59f1470          LDR      r1,|L1.2216|          ;358
000434  e5911000          LDR      r1,[r1,#0]            ;358  ; OSTCBCur
000438  e5c1002c          STRB     r0,[r1,#0x2c]         ;358
00043c  e59f0464          LDR      r0,|L1.2216|          ;359
000440  e5900000          LDR      r0,[r0,#0]            ;359  ; OSTCBCur
000444  e1c052ba          STRH     r5,[r0,#0x2a]         ;359
000448  e1a00004          MOV      r0,r4                 ;360

⌨️ 快捷键说明

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