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

📄 os_flag.txt

📁 ucos2 is a file system for embedded applications which can be used on any media, for which you can p
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 919] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_flag.o --depend=.\rvmdk\os_flag.d --device=DARMP --apcs=interwork -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\ARM\Generic\RealView -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\uCOSView\Source -I..\..\..\..\..\uCOSView\Ports\ARM7\LPC2000\IAR -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\ARM\RealView -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -IC:\Keil\ARM\INC\Philips --omf_browse=.\rvmdk\os_flag.crf ..\..\..\..\..\uCOS-II\Source\os_flag.c]
                          ARM

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

                  OSFlagAccept PROC
;;;92     OS_FLAGS  OSFlagAccept (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *perr)
;;;93     {
000000  e92d41f0          PUSH     {r4-r8,lr}
000004  e1a05000          MOV      r5,r0
;;;94         OS_FLAGS      flags_rdy;
;;;95         INT8U         result;
;;;96         BOOLEAN       consume;
;;;97     #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;;;98         OS_CPU_SR     cpu_sr = 0;
;;;99     #endif
;;;100    
;;;101    
;;;102    
;;;103    #if OS_ARG_CHK_EN > 0
;;;104        if (perr == (INT8U *)0) {                              /* Validate 'perr'                          */
;;;105            return ((OS_FLAGS)0);
;;;106        }
;;;107        if (pgrp == (OS_FLAG_GRP *)0) {                        /* Validate 'pgrp'                          */
;;;108            *perr = OS_ERR_FLAG_INVALID_PGRP;
;;;109            return ((OS_FLAGS)0);
;;;110        }
;;;111    #endif
;;;112        if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {          /* Validate event block type                */
000008  e5d00000          LDRB     r0,[r0,#0]
00000c  e1a06003          MOV      r6,r3                 ;93
000010  e1a07001          MOV      r7,r1                 ;93
000014  e3500005          CMP      r0,#5
;;;113            *perr = OS_ERR_EVENT_TYPE;
000018  13a00001          MOVNE    r0,#1
00001c  15c60000          STRBNE   r0,[r6,#0]
000020  e1a04002          MOV      r4,r2                 ;93
;;;114            return ((OS_FLAGS)0);
000024  13a00000          MOVNE    r0,#0
000028  1a000031          BNE      |L1.244|
;;;115        }
;;;116        result = (INT8U)(wait_type & OS_FLAG_CONSUME);
00002c  e3140080          TST      r4,#0x80
;;;117        if (result != (INT8U)0) {                              /* See if we need to consume the flags      */
;;;118            wait_type &= ~OS_FLAG_CONSUME;
;;;119            consume    = OS_TRUE;
;;;120        } else {
;;;121            consume    = OS_FALSE;
;;;122        }
;;;123    /*$PAGE*/
;;;124        *perr = OS_ERR_NONE;                                   /* Assume NO error until proven otherwise.  */
000030  e3a00000          MOV      r0,#0
000034  03a08000          MOVEQ    r8,#0                 ;121
000038  13c44080          BICNE    r4,r4,#0x80           ;118
00003c  13a08001          MOVNE    r8,#1                 ;119
000040  e5c60000          STRB     r0,[r6,#0]
;;;125        OS_ENTER_CRITICAL();
000044  ebfffffe          BL       OS_CPU_SR_Save
;;;126        switch (wait_type) {
000048  e3540000          CMP      r4,#0
00004c  e3a02070          MOV      r2,#0x70              ;125
000050  0a000013          BEQ      |L1.164|
000054  e3540001          CMP      r4,#1
000058  0a000016          BEQ      |L1.184|
00005c  e3540002          CMP      r4,#2
000060  0a000008          BEQ      |L1.136|
000064  e3540003          CMP      r4,#3
000068  1a00001c          BNE      |L1.224|
;;;127            case OS_FLAG_WAIT_SET_ALL:                         /* See if all required flags are set        */
;;;128                 flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags);     /* Extract only the bits we want   */
;;;129                 if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
;;;130                     if (consume == OS_TRUE) {                 /* See if we need to consume the flags      */
;;;131                         pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we wanted      */
;;;132                     }
;;;133                 } else {
;;;134                     *perr = OS_ERR_FLAG_NOT_RDY;
;;;135                 }
;;;136                 OS_EXIT_CRITICAL();
;;;137                 break;
;;;138    
;;;139            case OS_FLAG_WAIT_SET_ANY:
;;;140                 flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags);     /* Extract only the bits we want   */
00006c  e1d510b8          LDRH     r1,[r5,#8]
000070  e0114007          ANDS     r4,r1,r7
;;;141                 if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag set                      */
000074  0a000017          BEQ      |L1.216|
                  |L1.120|
;;;142                     if (consume == OS_TRUE) {                 /* See if we need to consume the flags      */
000078  e3580001          CMP      r8,#1
00007c  01c11004          BICEQ    r1,r1,r4              ;131
000080  0a000012          BEQ      |L1.208|
000084  ea000004          B        |L1.156|
                  |L1.136|
000088  e1d510b8          LDRH     r1,[r5,#8]            ;128
00008c  e0014007          AND      r4,r1,r7              ;128
000090  e1540007          CMP      r4,r7                 ;129
000094  0afffff7          BEQ      |L1.120|
000098  ea00000e          B        |L1.216|
                  |L1.156|
00009c  ebfffffe          BL       OS_CPU_SR_Restore
0000a0  ea000012          B        |L1.240|
                  |L1.164|
;;;143                         pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we got         */
;;;144                     }
;;;145                 } else {
;;;146                     *perr = OS_ERR_FLAG_NOT_RDY;
;;;147                 }
;;;148                 OS_EXIT_CRITICAL();
;;;149                 break;
;;;150    
;;;151    #if OS_FLAG_WAIT_CLR_EN > 0
;;;152            case OS_FLAG_WAIT_CLR_ALL:                         /* See if all required flags are cleared    */
;;;153                 flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags);  /* Extract only the bits we want     */
0000a4  e1d510b8          LDRH     r1,[r5,#8]
0000a8  e1c74001          BIC      r4,r7,r1
;;;154                 if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
0000ac  e1540007          CMP      r4,r7
0000b0  1a000008          BNE      |L1.216|
0000b4  ea000002          B        |L1.196|
                  |L1.184|
;;;155                     if (consume == OS_TRUE) {                 /* See if we need to consume the flags      */
;;;156                         pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we wanted        */
;;;157                     }
;;;158                 } else {
;;;159                     *perr = OS_ERR_FLAG_NOT_RDY;
;;;160                 }
;;;161                 OS_EXIT_CRITICAL();
;;;162                 break;
;;;163    
;;;164            case OS_FLAG_WAIT_CLR_ANY:
;;;165                 flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want      */
0000b8  e1d510b8          LDRH     r1,[r5,#8]
0000bc  e1d74001          BICS     r4,r7,r1
;;;166                 if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag cleared                  */
0000c0  0a000004          BEQ      |L1.216|
                  |L1.196|
;;;167                     if (consume == OS_TRUE) {                 /* See if we need to consume the flags      */
0000c4  e3580001          CMP      r8,#1
0000c8  1afffff3          BNE      |L1.156|
;;;168                         pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we got           */
0000cc  e1811004          ORR      r1,r1,r4
                  |L1.208|
0000d0  e1c510b8          STRH     r1,[r5,#8]
0000d4  eafffff0          B        |L1.156|
                  |L1.216|
;;;169                     }
;;;170                 } else {
;;;171                     *perr = OS_ERR_FLAG_NOT_RDY;
0000d8  e5c62000          STRB     r2,[r6,#0]
0000dc  eaffffee          B        |L1.156|
                  |L1.224|
;;;172                 }
;;;173                 OS_EXIT_CRITICAL();
;;;174                 break;
;;;175    #endif
;;;176    
;;;177            default:
;;;178                 OS_EXIT_CRITICAL();
0000e0  ebfffffe          BL       OS_CPU_SR_Restore
;;;179                 flags_rdy = (OS_FLAGS)0;
;;;180                 *perr     = OS_ERR_FLAG_WAIT_TYPE;
0000e4  e3a0006f          MOV      r0,#0x6f
0000e8  e3a04000          MOV      r4,#0                 ;179
0000ec  e5c60000          STRB     r0,[r6,#0]
                  |L1.240|
;;;181                 break;
;;;182        }
;;;183        return (flags_rdy);
0000f0  e1a00004          MOV      r0,r4
                  |L1.244|
0000f4  e8bd41f0          POP      {r4-r8,lr}
;;;184    }
0000f8  e12fff1e          BX       lr
;;;185    #endif
                          ENDP

                  OSFlagCreate PROC
;;;208    OS_FLAG_GRP  *OSFlagCreate (OS_FLAGS flags, INT8U *perr)
;;;209    {
0000fc  e92d4070          PUSH     {r4-r6,lr}
000100  e1a06000          MOV      r6,r0
;;;210        OS_FLAG_GRP *pgrp;
;;;211    #if OS_CRITICAL_METHOD == 3                         /* Allocate storage for CPU status register        */
;;;212        OS_CPU_SR    cpu_sr = 0;
;;;213    #endif
;;;214    
;;;215    
;;;216    
;;;217    #if OS_ARG_CHK_EN > 0
;;;218        if (perr == (INT8U *)0) {                       /* Validate 'perr'                                 */
;;;219            return ((OS_FLAG_GRP *)0);
;;;220        }
;;;221    #endif
;;;222        if (OSIntNesting > 0) {                         /* See if called from ISR ...                      */
000104  e59f07dc          LDR      r0,|L1.2280|
000108  e1a05001          MOV      r5,r1                 ;209
00010c  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000110  e3500000          CMP      r0,#0
;;;223            *perr = OS_ERR_CREATE_ISR;                  /* ... can't CREATE from an ISR                    */
000114  13a00010          MOVNE    r0,#0x10
000118  15c50000          STRBNE   r0,[r5,#0]
;;;224            return ((OS_FLAG_GRP *)0);
00011c  13a00000          MOVNE    r0,#0
000120  1a000015          BNE      |L1.380|
;;;225        }
;;;226        OS_ENTER_CRITICAL();
000124  ebfffffe          BL       OS_CPU_SR_Save
;;;227        pgrp = OSFlagFreeList;                          /* Get next free event flag                        */
000128  e59f17bc          LDR      r1,|L1.2284|
00012c  e5914000          LDR      r4,[r1,#0]  ; OSFlagFreeList
;;;228        if (pgrp != (OS_FLAG_GRP *)0) {                 /* See if we have event flag groups available      */
000130  e3540000          CMP      r4,#0
000134  0a00000c          BEQ      |L1.364|
;;;229                                                        /* Adjust free list                                */
;;;230            OSFlagFreeList       = (OS_FLAG_GRP *)OSFlagFreeList->OSFlagWaitList;
000138  e5942004          LDR      r2,[r4,#4]
00013c  e5812000          STR      r2,[r1,#0]  ; OSFlagFreeList
;;;231            pgrp->OSFlagType     = OS_EVENT_TYPE_FLAG;  /* Set to event flag group type                    */
000140  e3a01005          MOV      r1,#5
000144  e5c41000          STRB     r1,[r4,#0]
;;;232            pgrp->OSFlagFlags    = flags;               /* Set to desired initial value                    */
000148  e1c460b8          STRH     r6,[r4,#8]
;;;233            pgrp->OSFlagWaitList = (void *)0;           /* Clear list of tasks waiting on flags            */
00014c  e3a06000          MOV      r6,#0
;;;234    #if OS_FLAG_NAME_SIZE > 1
;;;235            pgrp->OSFlagName[0]  = '?';
000150  e3a0103f          MOV      r1,#0x3f
000154  e5846004          STR      r6,[r4,#4]
000158  e5c4100a          STRB     r1,[r4,#0xa]
;;;236            pgrp->OSFlagName[1]  = OS_ASCII_NUL;
00015c  e5c4600b          STRB     r6,[r4,#0xb]
;;;237    #endif
;;;238            OS_EXIT_CRITICAL();
000160  ebfffffe          BL       OS_CPU_SR_Restore
;;;239            *perr                = OS_ERR_NONE;
000164  e5c56000          STRB     r6,[r5,#0]
000168  ea000002          B        |L1.376|
                  |L1.364|
;;;240        } else {
;;;241            OS_EXIT_CRITICAL();
00016c  ebfffffe          BL       OS_CPU_SR_Restore
;;;242            *perr                = OS_ERR_FLAG_GRP_DEPLETED;
000170  e3a00072          MOV      r0,#0x72
000174  e5c50000          STRB     r0,[r5,#0]
                  |L1.376|
;;;243        }
;;;244        return (pgrp);                                  /* Return pointer to event flag group              */
000178  e1a00004          MOV      r0,r4
                  |L1.380|
00017c  e8bd4070          POP      {r4-r6,lr}
;;;245    }
000180  e12fff1e          BX       lr

⌨️ 快捷键说明

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