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

📄 os_flag.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_flag.o --depend=.\rvmdk\os_flag.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_flag.c]
                          THUMB

                          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  e92de92d          PUSH     {r4-r8,lr}
000004  4605              MOV      r5,r0
000006  460f              MOV      r7,r1
000008  4614              MOV      r4,r2
00000a  461e              MOV      r6,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;
;;;99     #endif
;;;100    
;;;101    
;;;102    
;;;103    #if OS_ARG_CHK_EN > 0
;;;104        if (perr == (INT8U *)0) {                              /* Validate 'perr'                          */
00000c  b916              CBNZ     r6,|L1.20|
;;;105            return ((OS_FLAGS)0);
00000e  2000              MOVS     r0,#0
000010  e8bde8bd          POP      {r4-r8,pc}
                  |L1.20|
;;;106        }
;;;107        if (pgrp == (OS_FLAG_GRP *)0) {                        /* Validate 'pgrp'                          */
000014  b925              CBNZ     r5,|L1.32|
;;;108            *perr = OS_ERR_FLAG_INVALID_PGRP;
000016  206e              MOVS     r0,#0x6e
000018  7030              STRB     r0,[r6,#0]
;;;109            return ((OS_FLAGS)0);
00001a  2000              MOVS     r0,#0
00001c  e8bde8bd          POP      {r4-r8,pc}
                  |L1.32|
;;;110        }
;;;111    #endif
;;;112        if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {          /* Validate event block type                */
000020  7828              LDRB     r0,[r5,#0]
000022  2805              CMP      r0,#5
000024  d004              BEQ      |L1.48|
;;;113            *perr = OS_ERR_EVENT_TYPE;
000026  2001              MOVS     r0,#1
000028  7030              STRB     r0,[r6,#0]
;;;114            return ((OS_FLAGS)0);
00002a  2000              MOVS     r0,#0
00002c  e8bde8bd          POP      {r4-r8,pc}
                  |L1.48|
;;;115        }
;;;116        result = (INT8U)(wait_type & OS_FLAG_CONSUME);
000030  f004f004          AND      r0,r4,#0x80
;;;117        if (result != (INT8U)0) {                              /* See if we need to consume the flags      */
000034  b120              CBZ      r0,|L1.64|
;;;118            wait_type &= ~OS_FLAG_CONSUME;
000036  f024f024          BIC      r4,r4,#0x80
;;;119            consume    = OS_TRUE;
00003a  f04ff04f          MOV      r8,#1
00003e  e001              B        |L1.68|
                  |L1.64|
;;;120        } else {
;;;121            consume    = OS_FALSE;
000040  f04ff04f          MOV      r8,#0
                  |L1.68|
;;;122        }
;;;123    /*$PAGE*/
;;;124        *perr = OS_ERR_NONE;                                   /* Assume NO error until proven otherwise.  */
000044  2000              MOVS     r0,#0
000046  7030              STRB     r0,[r6,#0]
;;;125        OS_ENTER_CRITICAL();
000048  f7fff7ff          BL       OS_CPU_SR_Save
;;;126        switch (wait_type) {
00004c  2270              MOVS     r2,#0x70
00004e  b314              CBZ      r4,|L1.150|
000050  2c01              CMP      r4,#1
000052  d02f              BEQ      |L1.180|
000054  2c02              CMP      r4,#2
000056  d00b              BEQ      |L1.112|
000058  2c03              CMP      r4,#3
00005a  d139              BNE      |L1.208|
;;;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   */
00005c  8929              LDRH     r1,[r5,#8]
00005e  ea01ea01          AND      r4,r1,r7
;;;141                 if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag set                      */
000062  b1a4              CBZ      r4,|L1.142|
000064  f1b8f1b8          CMP      r8,#1
;;;142                     if (consume == OS_TRUE) {                 /* See if we need to consume the flags      */
000068  d112              BNE      |L1.144|
00006a  43a1              BICS     r1,r1,r4
00006c  8129              STRH     r1,[r5,#8]
;;;143                         pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we got         */
00006e  e00f              B        |L1.144|
                  |L1.112|
000070  8929              LDRH     r1,[r5,#8]
000072  ea01ea01          AND      r4,r1,r7
000076  42bc              CMP      r4,r7
000078  d105              BNE      |L1.134|
00007a  f1b8f1b8          CMP      r8,#1
00007e  d103              BNE      |L1.136|
000080  43a1              BICS     r1,r1,r4
000082  8129              STRH     r1,[r5,#8]
000084  e000              B        |L1.136|
                  |L1.134|
000086  7032              STRB     r2,[r6,#0]
                  |L1.136|
000088  f7fff7ff          BL       OS_CPU_SR_Restore
00008c  e025              B        |L1.218|
                  |L1.142|
;;;144                     }
;;;145                 } else {
;;;146                     *perr = OS_ERR_FLAG_NOT_RDY;
00008e  7032              STRB     r2,[r6,#0]
                  |L1.144|
;;;147                 }
;;;148                 OS_EXIT_CRITICAL();
000090  f7fff7ff          BL       OS_CPU_SR_Restore
;;;149                 break;
000094  e021              B        |L1.218|
                  |L1.150|
;;;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     */
000096  8929              LDRH     r1,[r5,#8]
000098  ea27ea27          BIC      r4,r7,r1
;;;154                 if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
00009c  42bc              CMP      r4,r7
00009e  d105              BNE      |L1.172|
;;;155                     if (consume == OS_TRUE) {                 /* See if we need to consume the flags      */
0000a0  f1b8f1b8          CMP      r8,#1
0000a4  d103              BNE      |L1.174|
;;;156                         pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we wanted        */
0000a6  4321              ORRS     r1,r1,r4
0000a8  8129              STRH     r1,[r5,#8]
0000aa  e000              B        |L1.174|
                  |L1.172|
;;;157                     }
;;;158                 } else {
;;;159                     *perr = OS_ERR_FLAG_NOT_RDY;
0000ac  7032              STRB     r2,[r6,#0]
                  |L1.174|
;;;160                 }
;;;161                 OS_EXIT_CRITICAL();
0000ae  f7fff7ff          BL       OS_CPU_SR_Restore
;;;162                 break;
0000b2  e012              B        |L1.218|
                  |L1.180|
;;;163    
;;;164            case OS_FLAG_WAIT_CLR_ANY:
;;;165                 flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want      */
0000b4  8929              LDRH     r1,[r5,#8]
0000b6  ea27ea27          BIC      r4,r7,r1
;;;166                 if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag cleared                  */
0000ba  b12c              CBZ      r4,|L1.200|
;;;167                     if (consume == OS_TRUE) {                 /* See if we need to consume the flags      */
0000bc  f1b8f1b8          CMP      r8,#1
0000c0  d103              BNE      |L1.202|
;;;168                         pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we got           */
0000c2  4321              ORRS     r1,r1,r4
0000c4  8129              STRH     r1,[r5,#8]
0000c6  e000              B        |L1.202|
                  |L1.200|
;;;169                     }
;;;170                 } else {
;;;171                     *perr = OS_ERR_FLAG_NOT_RDY;
0000c8  7032              STRB     r2,[r6,#0]
                  |L1.202|
;;;172                 }
;;;173                 OS_EXIT_CRITICAL();
0000ca  f7fff7ff          BL       OS_CPU_SR_Restore
;;;174                 break;
0000ce  e004              B        |L1.218|
                  |L1.208|
;;;175    #endif
;;;176    
;;;177            default:
;;;178                 OS_EXIT_CRITICAL();
0000d0  f7fff7ff          BL       OS_CPU_SR_Restore
;;;179                 flags_rdy = (OS_FLAGS)0;
0000d4  2400              MOVS     r4,#0
;;;180                 *perr     = OS_ERR_FLAG_WAIT_TYPE;
0000d6  206f              MOVS     r0,#0x6f
0000d8  7030              STRB     r0,[r6,#0]
                  |L1.218|
;;;181                 break;
;;;182        }
;;;183        return (flags_rdy);
0000da  4620              MOV      r0,r4
;;;184    }
0000dc  e8bde8bd          POP      {r4-r8,pc}
;;;185    #endif
                          ENDP

                  OSFlagCreate PROC
;;;208    OS_FLAG_GRP  *OSFlagCreate (OS_FLAGS flags, INT8U *perr)
;;;209    {
0000e0  b570              PUSH     {r4-r6,lr}
0000e2  4606              MOV      r6,r0
0000e4  460d              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;
;;;213    #endif
;;;214    
;;;215    
;;;216    
;;;217    #if OS_ARG_CHK_EN > 0
;;;218        if (perr == (INT8U *)0) {                       /* Validate 'perr'                                 */
0000e6  b90d              CBNZ     r5,|L1.236|
;;;219            return ((OS_FLAG_GRP *)0);
0000e8  2000              MOVS     r0,#0
;;;220        }
;;;221    #endif
;;;222        if (OSIntNesting > 0) {                         /* See if called from ISR ...                      */
;;;223            *perr = OS_ERR_CREATE_ISR;                  /* ... can't CREATE from an ISR                    */
;;;224            return ((OS_FLAG_GRP *)0);
;;;225        }
;;;226        OS_ENTER_CRITICAL();
;;;227        pgrp = OSFlagFreeList;                          /* Get next free event flag                        */
;;;228        if (pgrp != (OS_FLAG_GRP *)0) {                 /* See if we have event flag groups available      */
;;;229                                                        /* Adjust free list                                */
;;;230            OSFlagFreeList       = (OS_FLAG_GRP *)OSFlagFreeList->OSFlagWaitList;
;;;231            pgrp->OSFlagType     = OS_EVENT_TYPE_FLAG;  /* Set to event flag group type                    */
;;;232            pgrp->OSFlagFlags    = flags;               /* Set to desired initial value                    */
;;;233            pgrp->OSFlagWaitList = (void *)0;           /* Clear list of tasks waiting on flags            */
;;;234    #if OS_FLAG_NAME_SIZE > 1
;;;235            pgrp->OSFlagName[0]  = '?';
;;;236            pgrp->OSFlagName[1]  = OS_ASCII_NUL;
;;;237    #endif
;;;238            OS_EXIT_CRITICAL();
;;;239            *perr                = OS_ERR_NONE;
;;;240        } else {
;;;241            OS_EXIT_CRITICAL();
;;;242            *perr                = OS_ERR_FLAG_GRP_DEPLETED;
;;;243        }
;;;244        return (pgrp);                                  /* Return pointer to event flag group              */
;;;245    }
0000ea  bd70              POP      {r4-r6,pc}
                  |L1.236|
0000ec  48f9              LDR      r0,|L1.1236|
0000ee  7800              LDRB     r0,[r0,#0]  ; OSIntNesting
0000f0  b118              CBZ      r0,|L1.250|
0000f2  2010              MOVS     r0,#0x10
0000f4  7028              STRB     r0,[r5,#0]
0000f6  2000              MOVS     r0,#0
0000f8  bd70              POP      {r4-r6,pc}
                  |L1.250|
0000fa  f7fff7ff          BL       OS_CPU_SR_Save
0000fe  49f6              LDR      r1,|L1.1240|
000100  680c              LDR      r4,[r1,#0]  ; OSFlagFreeList

⌨️ 快捷键说明

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