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

📄 os_flag.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 903] for uVision
; commandline ArmCC [--debug -c --asm --interleave -oos_flag.o --depend=os_flag.d --device=DARMP --apcs=interwork -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\ARM\Generic\RVMDK -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\ARM\RVMDK -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uCOSView\Source -I..\..\..\..\..\uCOSView\Ports\ARM7\LPC2468\IAR -Id:\Keil\ARM\INC\Philips ..\..\..\..\..\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 *err)
;;;93     {
000000  e92d5ff0          PUSH     {r4-r12,lr}
000004  e1a04000          MOV      r4,r0
000008  e1a05001          MOV      r5,r1
00000c  e1a06002          MOV      r6,r2
000010  e1a07003          MOV      r7,r3
;;;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;
000014  e3a0b000          MOV      r11,#0
;;;99     #endif
;;;100    
;;;101    
;;;102    
;;;103    #if OS_ARG_CHK_EN > 0
;;;104        if (err == (INT8U *)0) {                               /* Validate 'err'                           */
000018  e3570000          CMP      r7,#0
00001c  1a000002          BNE      |L1.44|
;;;105            return ((OS_FLAGS)0);
000020  e3a00000          MOV      r0,#0
                  |L1.36|
000024  e8bd5ff0          POP      {r4-r12,lr}
;;;106        }
;;;107        if (pgrp == (OS_FLAG_GRP *)0) {                        /* Validate 'pgrp'                          */
;;;108            *err = 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                */
;;;113            *err = OS_ERR_EVENT_TYPE;
;;;114            return ((OS_FLAGS)0);
;;;115        }
;;;116        result = (INT8U)(wait_type & OS_FLAG_CONSUME);
;;;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        *err = OS_ERR_NONE;                                    /* Assume NO error until proven otherwise.  */
;;;125        OS_ENTER_CRITICAL();
;;;126        switch (wait_type) {
;;;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                     *err  = 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   */
;;;141                 if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag set                      */
;;;142                     if (consume == OS_TRUE) {                 /* See if we need to consume the flags      */
;;;143                         pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we got         */
;;;144                     }
;;;145                 } else {
;;;146                     *err  = 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     */
;;;154                 if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
;;;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                     *err  = 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      */
;;;166                 if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag cleared                  */
;;;167                     if (consume == OS_TRUE) {                 /* See if we need to consume the flags      */
;;;168                         pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we got           */
;;;169                     }
;;;170                 } else {
;;;171                     *err  = OS_ERR_FLAG_NOT_RDY;
;;;172                 }
;;;173                 OS_EXIT_CRITICAL();
;;;174                 break;
;;;175    #endif
;;;176    
;;;177            default:
;;;178                 OS_EXIT_CRITICAL();
;;;179                 flags_rdy = (OS_FLAGS)0;
;;;180                 *err      = OS_ERR_FLAG_WAIT_TYPE;
;;;181                 break;
;;;182        }
;;;183        return (flags_rdy);
;;;184    }
000028  e12fff1e          BX       lr
                  |L1.44|
00002c  e3540000          CMP      r4,#0
000030  1a000003          BNE      |L1.68|
000034  e3a0006e          MOV      r0,#0x6e
000038  e5c70000          STRB     r0,[r7,#0]
00003c  e3a00000          MOV      r0,#0
000040  eafffff7          B        |L1.36|
                  |L1.68|
000044  e5d40000          LDRB     r0,[r4,#0]
000048  e3500005          CMP      r0,#5
00004c  0a000003          BEQ      |L1.96|
000050  e3a00001          MOV      r0,#1
000054  e5c70000          STRB     r0,[r7,#0]
000058  e3a00000          MOV      r0,#0
00005c  eafffff0          B        |L1.36|
                  |L1.96|
000060  e2069080          AND      r9,r6,#0x80
000064  e3590000          CMP      r9,#0
000068  0a000002          BEQ      |L1.120|
00006c  e3c66080          BIC      r6,r6,#0x80
000070  e3a0a001          MOV      r10,#1
000074  ea000000          B        |L1.124|
                  |L1.120|
000078  e3a0a000          MOV      r10,#0
                  |L1.124|
00007c  e3a00000          MOV      r0,#0
000080  e5c70000          STRB     r0,[r7,#0]
000084  ebfffffe          BL       OS_CPU_SR_Save
000088  e1a0b000          MOV      r11,r0
00008c  e3560000          CMP      r6,#0
000090  0a000026          BEQ      |L1.304|
000094  e3560001          CMP      r6,#1
000098  0a000034          BEQ      |L1.368|
00009c  e3560002          CMP      r6,#2
0000a0  0a000002          BEQ      |L1.176|
0000a4  e3560003          CMP      r6,#3
0000a8  1a000040          BNE      |L1.432|
0000ac  ea00000f          B        |L1.240|
                  |L1.176|
0000b0  e1a00000          MOV      r0,r0
0000b4  e1d400b8          LDRH     r0,[r4,#8]
0000b8  e0008005          AND      r8,r0,r5
0000bc  e1580005          CMP      r8,r5
0000c0  1a000005          BNE      |L1.220|
0000c4  e35a0001          CMP      r10,#1
0000c8  1a000005          BNE      |L1.228|
0000cc  e1d400b8          LDRH     r0,[r4,#8]
0000d0  e1c00008          BIC      r0,r0,r8
0000d4  e1c400b8          STRH     r0,[r4,#8]
0000d8  ea000001          B        |L1.228|
                  |L1.220|
0000dc  e3a00070          MOV      r0,#0x70
0000e0  e5c70000          STRB     r0,[r7,#0]
                  |L1.228|
0000e4  e1a0000b          MOV      r0,r11
0000e8  ebfffffe          BL       OS_CPU_SR_Restore
0000ec  ea000036          B        |L1.460|
                  |L1.240|
0000f0  e1a00000          MOV      r0,r0
0000f4  e1d400b8          LDRH     r0,[r4,#8]
0000f8  e0008005          AND      r8,r0,r5
0000fc  e3580000          CMP      r8,#0
000100  0a000005          BEQ      |L1.284|
000104  e35a0001          CMP      r10,#1
000108  1a000005          BNE      |L1.292|
00010c  e1d400b8          LDRH     r0,[r4,#8]
000110  e1c00008          BIC      r0,r0,r8
000114  e1c400b8          STRH     r0,[r4,#8]
000118  ea000001          B        |L1.292|
                  |L1.284|
00011c  e3a00070          MOV      r0,#0x70
000120  e5c70000          STRB     r0,[r7,#0]
                  |L1.292|
000124  e1a0000b          MOV      r0,r11
000128  ebfffffe          BL       OS_CPU_SR_Restore
00012c  ea000026          B        |L1.460|
                  |L1.304|
000130  e1a00000          MOV      r0,r0
000134  e1d400b8          LDRH     r0,[r4,#8]
000138  e1c58000          BIC      r8,r5,r0
00013c  e1580005          CMP      r8,r5
000140  1a000005          BNE      |L1.348|
000144  e35a0001          CMP      r10,#1
000148  1a000005          BNE      |L1.356|
00014c  e1d400b8          LDRH     r0,[r4,#8]
000150  e1800008          ORR      r0,r0,r8
000154  e1c400b8          STRH     r0,[r4,#8]
000158  ea000001          B        |L1.356|
                  |L1.348|
00015c  e3a00070          MOV      r0,#0x70
000160  e5c70000          STRB     r0,[r7,#0]
                  |L1.356|
000164  e1a0000b          MOV      r0,r11
000168  ebfffffe          BL       OS_CPU_SR_Restore
00016c  ea000016          B        |L1.460|
                  |L1.368|
000170  e1a00000          MOV      r0,r0
000174  e1d400b8          LDRH     r0,[r4,#8]
000178  e1c58000          BIC      r8,r5,r0
00017c  e3580000          CMP      r8,#0
000180  0a000005          BEQ      |L1.412|
000184  e35a0001          CMP      r10,#1
000188  1a000005          BNE      |L1.420|
00018c  e1d400b8          LDRH     r0,[r4,#8]
000190  e1800008          ORR      r0,r0,r8
000194  e1c400b8          STRH     r0,[r4,#8]
000198  ea000001          B        |L1.420|
                  |L1.412|
00019c  e3a00070          MOV      r0,#0x70
0001a0  e5c70000          STRB     r0,[r7,#0]
                  |L1.420|
0001a4  e1a0000b          MOV      r0,r11
0001a8  ebfffffe          BL       OS_CPU_SR_Restore
0001ac  ea000006          B        |L1.460|
                  |L1.432|
0001b0  e1a00000          MOV      r0,r0
0001b4  e1a0000b          MOV      r0,r11
0001b8  ebfffffe          BL       OS_CPU_SR_Restore
0001bc  e3a08000          MOV      r8,#0
0001c0  e3a0006f          MOV      r0,#0x6f
0001c4  e5c70000          STRB     r0,[r7,#0]
0001c8  e1a00000          MOV      r0,r0
                  |L1.460|
0001cc  e1a00000          MOV      r0,r0
0001d0  e1a00008          MOV      r0,r8
0001d4  eaffff92          B        |L1.36|
                          ENDP

                  OSFlagCreate PROC
;;;208    OS_FLAG_GRP  *OSFlagCreate (OS_FLAGS flags, INT8U *err)
;;;209    {
0001d8  e92d41f0          PUSH     {r4-r8,lr}
0001dc  e1a04000          MOV      r4,r0
0001e0  e1a05001          MOV      r5,r1
;;;210        OS_FLAG_GRP *pgrp;
;;;211    #if OS_CRITICAL_METHOD == 3                         /* Allocate storage for CPU status register        */
;;;212        OS_CPU_SR    cpu_sr = 0;
0001e4  e3a07000          MOV      r7,#0
;;;213    #endif
;;;214    
;;;215    
;;;216    
;;;217    #if OS_ARG_CHK_EN > 0
;;;218        if (err == (INT8U *)0) {                        /* Validate 'err'                                  */
0001e8  e3550000          CMP      r5,#0
0001ec  1a000002          BNE      |L1.508|
;;;219            return ((OS_FLAG_GRP *)0);
0001f0  e3a00000          MOV      r0,#0
                  |L1.500|
0001f4  e8bd41f0          POP      {r4-r8,lr}
;;;220        }
;;;221    #endif
;;;222        if (OSIntNesting > 0) {                         /* See if called from ISR ...                      */
;;;223            *err = OS_ERR_CREATE_ISR;                   /* ... can't CREATE from an ISR                    */

⌨️ 快捷键说明

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