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

📄 os_flag.txt

📁 在KEIL下成功使用UCOS-II嵌入式操作系统
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 947] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\os_flag.o --device=DARMP -O0 -IC:\Keil\ARM\INC\Philips ..\Source\OS_FLAG.C]

                          ARM

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

                  OSFlagAccept PROC
;;;78     OS_FLAGS  OSFlagAccept (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *err)
;;;79     {
000000  e92d47f0          PUSH     {r4-r10,lr}
000004  e1a04000          MOV      r4,r0
000008  e1a05001          MOV      r5,r1
00000c  e1a06002          MOV      r6,r2
000010  e1a07003          MOV      r7,r3
;;;80     #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;;;81         OS_CPU_SR     cpu_sr;
;;;82     #endif    
;;;83         OS_FLAGS      flags_cur;
;;;84         OS_FLAGS      flags_rdy;
;;;85         BOOLEAN       consume;
;;;86     
;;;87     
;;;88     #if OS_ARG_CHK_EN > 0
;;;89         if (pgrp == (OS_FLAG_GRP *)0) {                        /* Validate 'pgrp'                          */
000014  e3540000          CMP      r4,#0
000018  1a000003          BNE      |L1.44|
;;;90             *err = OS_FLAG_INVALID_PGRP;
00001c  e3a00096          MOV      r0,#0x96
000020  e5c70000          STRB     r0,[r7,#0]
;;;91             return ((OS_FLAGS)0);
000024  e3a00000          MOV      r0,#0
;;;92         }
;;;93         if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {          /* Validate event block type                */
;;;94             *err = OS_ERR_EVENT_TYPE;
;;;95             return ((OS_FLAGS)0);
;;;96         }
;;;97     #endif
;;;98         if (wait_type & OS_FLAG_CONSUME) {                     /* See if we need to consume the flags      */
;;;99             wait_type &= ~OS_FLAG_CONSUME;
;;;100            consume    = TRUE;
;;;101        } else {
;;;102            consume    = FALSE;
;;;103        }
;;;104    /*$PAGE*/
;;;105        *err = OS_NO_ERR;                                      /* Assume NO error until proven otherwise.  */
;;;106        OS_ENTER_CRITICAL();
;;;107        switch (wait_type) {
;;;108            case OS_FLAG_WAIT_SET_ALL:                         /* See if all required flags are set        */
;;;109                 flags_rdy = pgrp->OSFlagFlags & flags;        /* Extract only the bits we want            */
;;;110                 if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
;;;111                     if (consume == TRUE) {                    /* See if we need to consume the flags      */
;;;112                         pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we wanted      */
;;;113                     }
;;;114                 } else {
;;;115                     *err  = OS_FLAG_ERR_NOT_RDY;
;;;116                 }
;;;117                 flags_cur = pgrp->OSFlagFlags;                /* Will return the state of the group       */
;;;118                 OS_EXIT_CRITICAL();
;;;119                 break;
;;;120    
;;;121            case OS_FLAG_WAIT_SET_ANY:
;;;122                 flags_rdy = pgrp->OSFlagFlags & flags;        /* Extract only the bits we want            */
;;;123                 if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag set                      */
;;;124                     if (consume == TRUE) {                    /* See if we need to consume the flags      */
;;;125                         pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we got         */
;;;126                     }
;;;127                 } else {
;;;128                     *err  = OS_FLAG_ERR_NOT_RDY;
;;;129                 }
;;;130                 flags_cur = pgrp->OSFlagFlags;                /* Will return the state of the group       */
;;;131                 OS_EXIT_CRITICAL();
;;;132                 break;
;;;133    
;;;134    #if OS_FLAG_WAIT_CLR_EN > 0
;;;135            case OS_FLAG_WAIT_CLR_ALL:                         /* See if all required flags are cleared    */
;;;136                 flags_rdy = ~pgrp->OSFlagFlags & flags;       /* Extract only the bits we want            */
;;;137                 if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
;;;138                     if (consume == TRUE) {                    /* See if we need to consume the flags      */
;;;139                         pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we wanted        */
;;;140                     }
;;;141                 } else {
;;;142                     *err  = OS_FLAG_ERR_NOT_RDY;
;;;143                 }
;;;144                 flags_cur = pgrp->OSFlagFlags;                /* Will return the state of the group       */
;;;145                 OS_EXIT_CRITICAL();
;;;146                 break;
;;;147    
;;;148            case OS_FLAG_WAIT_CLR_ANY:
;;;149                 flags_rdy = ~pgrp->OSFlagFlags & flags;       /* Extract only the bits we want            */
;;;150                 if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag cleared                  */
;;;151                     if (consume == TRUE) {                    /* See if we need to consume the flags      */
;;;152                         pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we got           */
;;;153                     }
;;;154                 } else {
;;;155                     *err  = OS_FLAG_ERR_NOT_RDY;
;;;156                 }
;;;157                 flags_cur = pgrp->OSFlagFlags;                /* Will return the state of the group       */
;;;158                 OS_EXIT_CRITICAL();
;;;159                 break;
;;;160    #endif
;;;161    
;;;162            default:
;;;163                 OS_EXIT_CRITICAL();
;;;164                 flags_cur = (OS_FLAGS)0;
;;;165                 *err      = OS_FLAG_ERR_WAIT_TYPE;
;;;166                 break;
;;;167        }
;;;168        return (flags_cur);
;;;169    }
                  |L1.40|
000028  e8bd87f0          POP      {r4-r10,pc}
                  |L1.44|
00002c  e5d40000          LDRB     r0,[r4,#0]            ;93
000030  e3500005          CMP      r0,#5                 ;93
000034  0a000003          BEQ      |L1.72|               ;93
000038  e3a00001          MOV      r0,#1                 ;94
00003c  e5c70000          STRB     r0,[r7,#0]            ;94
000040  e3a00000          MOV      r0,#0                 ;95
000044  eafffff7          B        |L1.40|               ;95
                  |L1.72|
000048  e3160080          TST      r6,#0x80              ;98
00004c  0a000002          BEQ      |L1.92|               ;98
000050  e3c66080          BIC      r6,r6,#0x80           ;99
000054  e3a0a001          MOV      r10,#1                ;100
000058  ea000000          B        |L1.96|               ;100
                  |L1.92|
00005c  e3a0a000          MOV      r10,#0                ;102
                  |L1.96|
000060  e3a00000          MOV      r0,#0                 ;105
000064  e5c70000          STRB     r0,[r7,#0]            ;105
000068  ef000002          SVC      0x2  ; formerly SWI   ;106
00006c  e3560000          CMP      r6,#0                 ;107
000070  0a000026          BEQ      |L1.272|              ;107
000074  e3560001          CMP      r6,#1                 ;107
000078  0a000036          BEQ      |L1.344|              ;107
00007c  e3560002          CMP      r6,#2                 ;107
000080  0a000002          BEQ      |L1.144|              ;107
000084  e3560003          CMP      r6,#3                 ;107
000088  1a000044          BNE      |L1.416|              ;107
00008c  ea00000f          B        |L1.208|              ;107
                  |L1.144|
000090  e1a00000          MOV      r0,r0                 ;108
000094  e1d400b8          LDRH     r0,[r4,#8]            ;109
000098  e0008005          AND      r8,r0,r5              ;109
00009c  e1580005          CMP      r8,r5                 ;110
0000a0  1a000005          BNE      |L1.188|              ;110
0000a4  e35a0001          CMP      r10,#1                ;111
0000a8  1a000005          BNE      |L1.196|              ;111
0000ac  e1d400b8          LDRH     r0,[r4,#8]            ;112
0000b0  e1c00008          BIC      r0,r0,r8              ;112
0000b4  e1c400b8          STRH     r0,[r4,#8]            ;112
0000b8  ea000001          B        |L1.196|              ;112
                  |L1.188|
0000bc  e3a00098          MOV      r0,#0x98              ;115
0000c0  e5c70000          STRB     r0,[r7,#0]            ;115
                  |L1.196|
0000c4  e1d490b8          LDRH     r9,[r4,#8]            ;117
0000c8  ef000003          SVC      0x3  ; formerly SWI   ;118
0000cc  ea000039          B        |L1.440|              ;119
                  |L1.208|
0000d0  e1a00000          MOV      r0,r0                 ;121
0000d4  e1d400b8          LDRH     r0,[r4,#8]            ;122
0000d8  e0008005          AND      r8,r0,r5              ;122
0000dc  e3580000          CMP      r8,#0                 ;123
0000e0  0a000005          BEQ      |L1.252|              ;123
0000e4  e35a0001          CMP      r10,#1                ;124
0000e8  1a000005          BNE      |L1.260|              ;124
0000ec  e1d400b8          LDRH     r0,[r4,#8]            ;125
0000f0  e1c00008          BIC      r0,r0,r8              ;125
0000f4  e1c400b8          STRH     r0,[r4,#8]            ;125
0000f8  ea000001          B        |L1.260|              ;125
                  |L1.252|
0000fc  e3a00098          MOV      r0,#0x98              ;128
000100  e5c70000          STRB     r0,[r7,#0]            ;128
                  |L1.260|
000104  e1d490b8          LDRH     r9,[r4,#8]            ;130
000108  ef000003          SVC      0x3  ; formerly SWI   ;131
00010c  ea000029          B        |L1.440|              ;132
                  |L1.272|
000110  e1a00000          MOV      r0,r0                 ;135
000114  e1d400b8          LDRH     r0,[r4,#8]            ;136
000118  e1c50000          BIC      r0,r5,r0              ;136
00011c  e1a08800          LSL      r8,r0,#16             ;136
000120  e1a08828          LSR      r8,r8,#16             ;136
000124  e1580005          CMP      r8,r5                 ;137
000128  1a000005          BNE      |L1.324|              ;137
00012c  e35a0001          CMP      r10,#1                ;138
000130  1a000005          BNE      |L1.332|              ;138
000134  e1d400b8          LDRH     r0,[r4,#8]            ;139
000138  e1800008          ORR      r0,r0,r8              ;139
00013c  e1c400b8          STRH     r0,[r4,#8]            ;139
000140  ea000001          B        |L1.332|              ;139
                  |L1.324|
000144  e3a00098          MOV      r0,#0x98              ;142
000148  e5c70000          STRB     r0,[r7,#0]            ;142
                  |L1.332|
00014c  e1d490b8          LDRH     r9,[r4,#8]            ;144
000150  ef000003          SVC      0x3  ; formerly SWI   ;145
000154  ea000017          B        |L1.440|              ;146
                  |L1.344|
000158  e1a00000          MOV      r0,r0                 ;148
00015c  e1d400b8          LDRH     r0,[r4,#8]            ;149
000160  e1c50000          BIC      r0,r5,r0              ;149
000164  e1a08800          LSL      r8,r0,#16             ;149
000168  e1a08828          LSR      r8,r8,#16             ;149
00016c  e3580000          CMP      r8,#0                 ;150
000170  0a000005          BEQ      |L1.396|              ;150
000174  e35a0001          CMP      r10,#1                ;151
000178  1a000005          BNE      |L1.404|              ;151
00017c  e1d400b8          LDRH     r0,[r4,#8]            ;152
000180  e1800008          ORR      r0,r0,r8              ;152
000184  e1c400b8          STRH     r0,[r4,#8]            ;152
000188  ea000001          B        |L1.404|              ;152
                  |L1.396|
00018c  e3a00098          MOV      r0,#0x98              ;155
000190  e5c70000          STRB     r0,[r7,#0]            ;155
                  |L1.404|
000194  e1d490b8          LDRH     r9,[r4,#8]            ;157
000198  ef000003          SVC      0x3  ; formerly SWI   ;158
00019c  ea000005          B        |L1.440|              ;159
                  |L1.416|
0001a0  e1a00000          MOV      r0,r0                 ;162
0001a4  ef000003          SVC      0x3  ; formerly SWI   ;163
0001a8  e3a09000          MOV      r9,#0                 ;164
0001ac  e3a00097          MOV      r0,#0x97              ;165
0001b0  e5c70000          STRB     r0,[r7,#0]            ;165
0001b4  e1a00000          MOV      r0,r0                 ;166
                  |L1.440|
0001b8  e1a00000          MOV      r0,r0                 ;119
0001bc  e1a00009          MOV      r0,r9                 ;168
0001c0  eaffff98          B        |L1.40|               ;168

⌨️ 快捷键说明

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