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

📄 os_q.txt

📁 ucos2.86版本结合STM板极支持包
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 914] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_q.o --depend=.\rvmdk\os_q.d --device=DARMSTM -O1 -Otime -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\arm-cortex-m3\Generic\RealView -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\CPU\ST\STM32\inc -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\Arm-Cortex-M3\RealView -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\Source -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Ports\ST\STM32 -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Source -ID:\Keil\ARM\INC\ST\STM32F10x ..\..\..\..\..\uCOS-II\Source\os_q.c]
                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  OSQAccept PROC
;;;61     void  *OSQAccept (OS_EVENT *pevent, INT8U *perr)
;;;62     {
000000  b570              PUSH     {r4-r6,lr}
000002  4605              MOV      r5,r0
000004  460c              MOV      r4,r1
;;;63         void      *pmsg;
;;;64         OS_Q      *pq;
;;;65     #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;66         OS_CPU_SR  cpu_sr = 0;
;;;67     #endif
;;;68     
;;;69     
;;;70     
;;;71     #if OS_ARG_CHK_EN > 0
;;;72         if (perr == (INT8U *)0) {                    /* Validate 'perr'                                    */
000006  b90c              CBNZ     r4,|L1.12|
;;;73             return ((void *)0);
000008  2000              MOVS     r0,#0
;;;74         }
;;;75         if (pevent == (OS_EVENT *)0) {               /* Validate 'pevent'                                  */
;;;76             *perr = OS_ERR_PEVENT_NULL;
;;;77             return ((void *)0);
;;;78         }
;;;79     #endif
;;;80         if (pevent->OSEventType != OS_EVENT_TYPE_Q) {/* Validate event block type                          */
;;;81             *perr = OS_ERR_EVENT_TYPE;
;;;82             return ((void *)0);
;;;83         }
;;;84         OS_ENTER_CRITICAL();
;;;85         pq = (OS_Q *)pevent->OSEventPtr;             /* Point at queue control block                       */
;;;86         if (pq->OSQEntries > 0) {                    /* See if any messages in the queue                   */
;;;87             pmsg = *pq->OSQOut++;                    /* Yes, extract oldest message from the queue         */
;;;88             pq->OSQEntries--;                        /* Update the number of entries in the queue          */
;;;89             if (pq->OSQOut == pq->OSQEnd) {          /* Wrap OUT pointer if we are at the end of the queue */
;;;90                 pq->OSQOut = pq->OSQStart;
;;;91             }
;;;92             *perr = OS_ERR_NONE;
;;;93         } else {
;;;94             *perr = OS_ERR_Q_EMPTY;
;;;95             pmsg  = (void *)0;                       /* Queue is empty                                     */
;;;96         }
;;;97         OS_EXIT_CRITICAL();
;;;98         return (pmsg);                               /* Return message received (or NULL)                  */
;;;99     }
00000a  bd70              POP      {r4-r6,pc}
                  |L1.12|
00000c  b91d              CBNZ     r5,|L1.22|
00000e  2004              MOVS     r0,#4
000010  7020              STRB     r0,[r4,#0]
000012  2000              MOVS     r0,#0
000014  bd70              POP      {r4-r6,pc}
                  |L1.22|
000016  7828              LDRB     r0,[r5,#0]
000018  2802              CMP      r0,#2
00001a  d003              BEQ      |L1.36|
00001c  2001              MOVS     r0,#1
00001e  7020              STRB     r0,[r4,#0]
000020  2000              MOVS     r0,#0
000022  bd70              POP      {r4-r6,pc}
                  |L1.36|
000024  f7fff7ff          BL       OS_CPU_SR_Save
000028  6869              LDR      r1,[r5,#4]
00002a  8aca              LDRH     r2,[r1,#0x16]
00002c  b172              CBZ      r2,|L1.76|
00002e  690b              LDR      r3,[r1,#0x10]
000030  1d1a              ADDS     r2,r3,#4
000032  610a              STR      r2,[r1,#0x10]
000034  681d              LDR      r5,[r3,#0]
000036  8acb              LDRH     r3,[r1,#0x16]
000038  1e5b              SUBS     r3,r3,#1
00003a  82cb              STRH     r3,[r1,#0x16]
00003c  688b              LDR      r3,[r1,#8]
00003e  429a              CMP      r2,r3
000040  d101              BNE      |L1.70|
000042  684a              LDR      r2,[r1,#4]
000044  610a              STR      r2,[r1,#0x10]
                  |L1.70|
000046  2100              MOVS     r1,#0
000048  7021              STRB     r1,[r4,#0]
00004a  e002              B        |L1.82|
                  |L1.76|
00004c  211f              MOVS     r1,#0x1f
00004e  7021              STRB     r1,[r4,#0]
000050  2500              MOVS     r5,#0
                  |L1.82|
000052  f7fff7ff          BL       OS_CPU_SR_Restore
000056  4628              MOV      r0,r5
000058  bd70              POP      {r4-r6,pc}
;;;100    #endif
                          ENDP

                  OSQCreate PROC
;;;121    OS_EVENT  *OSQCreate (void **start, INT16U size)
;;;122    {
00005a  e92de92d          PUSH     {r4-r8,lr}
00005e  4606              MOV      r6,r0
000060  460f              MOV      r7,r1
;;;123        OS_EVENT  *pevent;
;;;124        OS_Q      *pq;
;;;125    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;126        OS_CPU_SR  cpu_sr = 0;
;;;127    #endif
;;;128    
;;;129    
;;;130    
;;;131        if (OSIntNesting > 0) {                      /* See if called from ISR ...                         */
000062  48fc              LDR      r0,|L1.1108|
000064  7800              LDRB     r0,[r0,#0]  ; OSIntNesting
000066  b110              CBZ      r0,|L1.110|
;;;132            return ((OS_EVENT *)0);                  /* ... can't CREATE from an ISR                       */
000068  2000              MOVS     r0,#0
00006a  e8bde8bd          POP      {r4-r8,pc}
                  |L1.110|
;;;133        }
;;;134        OS_ENTER_CRITICAL();
00006e  f7fff7ff          BL       OS_CPU_SR_Save
;;;135        pevent = OSEventFreeList;                    /* Get next free event control block                  */
000072  f8dff8df          LDR      r8,|L1.1112|
000076  f8d8f8d8          LDR      r4,[r8,#0]  ; OSEventFreeList
;;;136        if (OSEventFreeList != (OS_EVENT *)0) {      /* See if pool of free ECB pool was empty             */
00007a  b114              CBZ      r4,|L1.130|
;;;137            OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
00007c  6861              LDR      r1,[r4,#4]
00007e  f8c8f8c8          STR      r1,[r8,#0]  ; OSEventFreeList
                  |L1.130|
;;;138        }
;;;139        OS_EXIT_CRITICAL();
000082  f7fff7ff          BL       OS_CPU_SR_Restore
;;;140        if (pevent != (OS_EVENT *)0) {               /* See if we have an event control block              */
000086  2c00              CMP      r4,#0
000088  d024              BEQ      |L1.212|
;;;141            OS_ENTER_CRITICAL();
00008a  f7fff7ff          BL       OS_CPU_SR_Save
;;;142            pq = OSQFreeList;                        /* Get a free queue control block                     */
00008e  49f3              LDR      r1,|L1.1116|
000090  680d              LDR      r5,[r1,#0]  ; OSQFreeList
;;;143            if (pq != (OS_Q *)0) {                   /* Were we able to get a queue control block ?        */
000092  b1bd              CBZ      r5,|L1.196|
;;;144                OSQFreeList            = OSQFreeList->OSQPtr; /* Yes, Adjust free list pointer to next free*/
000094  682a              LDR      r2,[r5,#0]
000096  600a              STR      r2,[r1,#0]  ; OSQFreeList
;;;145                OS_EXIT_CRITICAL();
000098  f7fff7ff          BL       OS_CPU_SR_Restore
;;;146                pq->OSQStart           = start;               /*      Initialize the queue                 */
00009c  606e              STR      r6,[r5,#4]
;;;147                pq->OSQEnd             = &start[size];
00009e  eb06eb06          ADD      r0,r6,r7,LSL #2
0000a2  60a8              STR      r0,[r5,#8]
;;;148                pq->OSQIn              = start;
0000a4  60ee              STR      r6,[r5,#0xc]
;;;149                pq->OSQOut             = start;
0000a6  612e              STR      r6,[r5,#0x10]
;;;150                pq->OSQSize            = size;
0000a8  82af              STRH     r7,[r5,#0x14]
;;;151                pq->OSQEntries         = 0;
0000aa  2000              MOVS     r0,#0
0000ac  82e8              STRH     r0,[r5,#0x16]
;;;152                pevent->OSEventType    = OS_EVENT_TYPE_Q;
0000ae  2102              MOVS     r1,#2
0000b0  7021              STRB     r1,[r4,#0]
;;;153                pevent->OSEventCnt     = 0;
0000b2  8120              STRH     r0,[r4,#8]
;;;154                pevent->OSEventPtr     = pq;
0000b4  6065              STR      r5,[r4,#4]
;;;155    #if OS_EVENT_NAME_SIZE > 1
;;;156                pevent->OSEventName[0] = '?';                  /* Unknown name                             */
0000b6  213f              MOVS     r1,#0x3f
0000b8  73e1              STRB     r1,[r4,#0xf]
;;;157                pevent->OSEventName[1] = OS_ASCII_NUL;
0000ba  7420              STRB     r0,[r4,#0x10]
;;;158    #endif
;;;159                OS_EventWaitListInit(pevent);                 /*      Initalize the wait list              */
0000bc  4620              MOV      r0,r4
0000be  f7fff7ff          BL       OS_EventWaitListInit
0000c2  e007              B        |L1.212|
                  |L1.196|
;;;160            } else {
;;;161                pevent->OSEventPtr = (void *)OSEventFreeList; /* No,  Return event control block on error  */
0000c4  f8d8f8d8          LDR      r1,[r8,#0]  ; OSEventFreeList
0000c8  6061              STR      r1,[r4,#4]
;;;162                OSEventFreeList    = pevent;
0000ca  f8c8f8c8          STR      r4,[r8,#0]  ; OSEventFreeList
;;;163                OS_EXIT_CRITICAL();
0000ce  f7fff7ff          BL       OS_CPU_SR_Restore
;;;164                pevent = (OS_EVENT *)0;
0000d2  2400              MOVS     r4,#0
                  |L1.212|
;;;165            }
;;;166        }
;;;167        return (pevent);
0000d4  4620              MOV      r0,r4
;;;168    }
0000d6  e8bde8bd          POP      {r4-r8,pc}
;;;169    /*$PAGE*/
                          ENDP

                  OSQDel PROC
;;;212    OS_EVENT  *OSQDel (OS_EVENT *pevent, INT8U opt, INT8U *perr)
;;;213    {
0000da  e92de92d          PUSH     {r4-r12,lr}
0000de  4604              MOV      r4,r0
0000e0  460f              MOV      r7,r1
0000e2  4615              MOV      r5,r2
;;;214        BOOLEAN    tasks_waiting;
;;;215        OS_EVENT  *pevent_return;
;;;216        OS_Q      *pq;
;;;217    #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;;;218        OS_CPU_SR  cpu_sr = 0;
;;;219    #endif
;;;220    
;;;221    
;;;222    
;;;223    #if OS_ARG_CHK_EN > 0
;;;224        if (perr == (INT8U *)0) {                              /* Validate 'perr'                          */
0000e4  b915              CBNZ     r5,|L1.236|
;;;225            return (pevent);
0000e6  4620              MOV      r0,r4
0000e8  e8bde8bd          POP      {r4-r12,pc}
                  |L1.236|
;;;226        }
;;;227        if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                        */
0000ec  b924              CBNZ     r4,|L1.248|
;;;228            *perr = OS_ERR_PEVENT_NULL;
0000ee  2004              MOVS     r0,#4
0000f0  7028              STRB     r0,[r5,#0]
;;;229            return (pevent);
0000f2  4620              MOV      r0,r4
0000f4  e8bde8bd          POP      {r4-r12,pc}
                  |L1.248|
;;;230        }
;;;231    #endif
;;;232        if (pevent->OSEventType != OS_EVENT_TYPE_Q) {          /* Validate event block type                */
0000f8  7820              LDRB     r0,[r4,#0]
0000fa  2802              CMP      r0,#2
0000fc  d004              BEQ      |L1.264|
;;;233            *perr = OS_ERR_EVENT_TYPE;
0000fe  2001              MOVS     r0,#1
000100  7028              STRB     r0,[r5,#0]
;;;234            return (pevent);
000102  4620              MOV      r0,r4
000104  e8bde8bd          POP      {r4-r12,pc}
                  |L1.264|
;;;235        }
;;;236        if (OSIntNesting > 0) {                                /* See if called from ISR ...               */
000108  48d2              LDR      r0,|L1.1108|
00010a  7800              LDRB     r0,[r0,#0]  ; OSIntNesting
00010c  b120              CBZ      r0,|L1.280|

⌨️ 快捷键说明

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