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

📄 os_q.txt

📁 在KEIL下成功使用UCOS-II嵌入式操作系统
💻 TXT
📖 第 1 页 / 共 4 页
字号:
;;;246                 return (pevent);
;;;247        }
;;;248    }
                  |L1.424|
0001a8  e8bd81f0          POP      {r4-r8,pc}
                  |L1.428|
0001ac  e3540000          CMP      r4,#0                 ;193
0001b0  1a000003          BNE      |L1.452|              ;193
0001b4  e3a00004          MOV      r0,#4                 ;194
0001b8  e5c60000          STRB     r0,[r6,#0]            ;194
0001bc  e1a00004          MOV      r0,r4                 ;195
0001c0  eafffff8          B        |L1.424|              ;195
                  |L1.452|
0001c4  e5d40000          LDRB     r0,[r4,#0]            ;197
0001c8  e3500002          CMP      r0,#2                 ;197
0001cc  0a000003          BEQ      |L1.480|              ;197
0001d0  e3a00001          MOV      r0,#1                 ;198
0001d4  e5c60000          STRB     r0,[r6,#0]            ;198
0001d8  e1a00004          MOV      r0,r4                 ;199
0001dc  eafffff1          B        |L1.424|              ;199
                  |L1.480|
0001e0  ef000002          SVC      0x2  ; formerly SWI   ;202
0001e4  e5d40001          LDRB     r0,[r4,#1]            ;203
0001e8  e3500000          CMP      r0,#0                 ;203
0001ec  0a000001          BEQ      |L1.504|              ;203
0001f0  e3a08001          MOV      r8,#1                 ;204
0001f4  ea000000          B        |L1.508|              ;204
                  |L1.504|
0001f8  e3a08000          MOV      r8,#0                 ;206
                  |L1.508|
0001fc  e3550000          CMP      r5,#0                 ;208
000200  0a000002          BEQ      |L1.528|              ;208
000204  e3550001          CMP      r5,#1                 ;208
000208  1a000036          BNE      |L1.744|              ;208
00020c  ea000018          B        |L1.628|              ;208
                  |L1.528|
000210  e1a00000          MOV      r0,r0                 ;209
000214  e3580000          CMP      r8,#0                 ;210
000218  1a000010          BNE      |L1.608|              ;210
00021c  e5947004          LDR      r7,[r4,#4]            ;211
000220  e59f0660          LDR      r0,|L1.2184|          ;212
000224  e5900000          LDR      r0,[r0,#0]            ;212  ; OSQFreeList
000228  e5870000          STR      r0,[r7,#0]            ;212
00022c  e59f0654          LDR      r0,|L1.2184|          ;213
000230  e5807000          STR      r7,[r0,#0]            ;213  ; OSQFreeList
000234  e3a00000          MOV      r0,#0                 ;214
000238  e5c40000          STRB     r0,[r4,#0]            ;214
00023c  e59f0640          LDR      r0,|L1.2180|          ;215
000240  e5900000          LDR      r0,[r0,#0]            ;215  ; OSEventFreeList
000244  e5840004          STR      r0,[r4,#4]            ;215
000248  e59f0634          LDR      r0,|L1.2180|          ;216
00024c  e5804000          STR      r4,[r0,#0]            ;216  ; OSEventFreeList
000250  ef000003          SVC      0x3  ; formerly SWI   ;217
000254  e3a00000          MOV      r0,#0                 ;218
000258  e5c60000          STRB     r0,[r6,#0]            ;218
00025c  eaffffd1          B        |L1.424|              ;219
                  |L1.608|
000260  ef000003          SVC      0x3  ; formerly SWI   ;221
000264  e3a00008          MOV      r0,#8                 ;222
000268  e5c60000          STRB     r0,[r6,#0]            ;222
00026c  e1a00004          MOV      r0,r4                 ;223
000270  eaffffcc          B        |L1.424|              ;223
                  |L1.628|
000274  e1a00000          MOV      r0,r0                 ;226
000278  ea000003          B        |L1.652|              ;227
                  |L1.636|
00027c  e3a02004          MOV      r2,#4                 ;228
000280  e3a01000          MOV      r1,#0                 ;228
000284  e1a00004          MOV      r0,r4                 ;228
000288  ebfffffe          BL       OS_EventTaskRdy       ;228
                  |L1.652|
00028c  e5d40001          LDRB     r0,[r4,#1]            ;227
000290  e3500000          CMP      r0,#0                 ;227
000294  1afffff8          BNE      |L1.636|              ;227
000298  e5947004          LDR      r7,[r4,#4]            ;230
00029c  e59f05e4          LDR      r0,|L1.2184|          ;231
0002a0  e5900000          LDR      r0,[r0,#0]            ;231  ; OSQFreeList
0002a4  e5870000          STR      r0,[r7,#0]            ;231
0002a8  e59f05d8          LDR      r0,|L1.2184|          ;232
0002ac  e5807000          STR      r7,[r0,#0]            ;232  ; OSQFreeList
0002b0  e3a00000          MOV      r0,#0                 ;233
0002b4  e5c40000          STRB     r0,[r4,#0]            ;233
0002b8  e59f05c4          LDR      r0,|L1.2180|          ;234
0002bc  e5900000          LDR      r0,[r0,#0]            ;234  ; OSEventFreeList
0002c0  e5840004          STR      r0,[r4,#4]            ;234
0002c4  e59f05b8          LDR      r0,|L1.2180|          ;235
0002c8  e5804000          STR      r4,[r0,#0]            ;235  ; OSEventFreeList
0002cc  ef000003          SVC      0x3  ; formerly SWI   ;236
0002d0  e3580001          CMP      r8,#1                 ;237
0002d4  1a000000          BNE      |L1.732|              ;237
0002d8  ebfffffe          BL       OS_Sched              ;238
                  |L1.732|
0002dc  e3a00000          MOV      r0,#0                 ;240
0002e0  e5c60000          STRB     r0,[r6,#0]            ;240
0002e4  eaffffaf          B        |L1.424|              ;241
                  |L1.744|
0002e8  e1a00000          MOV      r0,r0                 ;243
0002ec  ef000003          SVC      0x3  ; formerly SWI   ;244
0002f0  e3a00007          MOV      r0,#7                 ;245
0002f4  e5c60000          STRB     r0,[r6,#0]            ;245
0002f8  e1a00004          MOV      r0,r4                 ;246
0002fc  eaffffa9          B        |L1.424|              ;246
                          ENDP

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

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

⌨️ 快捷键说明

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