os_flag.txt

来自「针对STM32F103的UCOS移植」· 文本 代码 · 共 1,214 行 · 第 1/5 页

TXT
1,214
字号
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_flag.o --depend=.\rvmdk\os_flag.d --device=DARMSTM --apcs=interwork -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 -IC:\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  e92d41f0          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
;;;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                */
;;;113            *perr = 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        *perr = 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                     *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   */
;;;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                     *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     */
;;;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                     *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      */
;;;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                     *perr = 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                 *perr     = OS_ERR_FLAG_WAIT_TYPE;
;;;181                 break;
;;;182        }
;;;183        return (flags_rdy);
;;;184    }
000010  e8bd81f0          POP      {r4-r8,pc}
                  |L1.20|
000014  b925              CBNZ     r5,|L1.32|
000016  206e              MOVS     r0,#0x6e              ;108
000018  7030              STRB     r0,[r6,#0]            ;108
00001a  2000              MOVS     r0,#0                 ;109
00001c  e8bd81f0          POP      {r4-r8,pc}
                  |L1.32|
000020  7828              LDRB     r0,[r5,#0]            ;112
000022  2805              CMP      r0,#5                 ;112
000024  d004              BEQ      |L1.48|
000026  2001              MOVS     r0,#1                 ;113
000028  7030              STRB     r0,[r6,#0]            ;113
00002a  2000              MOVS     r0,#0                 ;114
00002c  e8bd81f0          POP      {r4-r8,pc}
                  |L1.48|
000030  f0040080          AND      r0,r4,#0x80           ;116
000034  b120              CBZ      r0,|L1.64|
000036  f0240480          BIC      r4,r4,#0x80           ;118
00003a  f04f0801          MOV      r8,#1                 ;119
00003e  e001              B        |L1.68|
                  |L1.64|
000040  f04f0800          MOV      r8,#0                 ;121
                  |L1.68|
000044  2000              MOVS     r0,#0                 ;124
000046  7030              STRB     r0,[r6,#0]            ;124
000048  f7fffffe          BL       OS_CPU_SR_Save
00004c  2270              MOVS     r2,#0x70              ;126
00004e  b314              CBZ      r4,|L1.150|
000050  2c01              CMP      r4,#1                 ;126
000052  d02f              BEQ      |L1.180|
000054  2c02              CMP      r4,#2                 ;126
000056  d00b              BEQ      |L1.112|
000058  2c03              CMP      r4,#3                 ;126
00005a  d139              BNE      |L1.208|
00005c  8929              LDRH     r1,[r5,#8]            ;140
00005e  ea010407          AND      r4,r1,r7              ;140
000062  b1a4              CBZ      r4,|L1.142|
000064  f1b80f01          CMP      r8,#1                 ;142
000068  d112              BNE      |L1.144|
00006a  43a1              BICS     r1,r1,r4              ;143
00006c  8129              STRH     r1,[r5,#8]            ;143
00006e  e00f              B        |L1.144|
                  |L1.112|
000070  8929              LDRH     r1,[r5,#8]            ;128
000072  ea010407          AND      r4,r1,r7              ;128
000076  42bc              CMP      r4,r7                 ;129
000078  d105              BNE      |L1.134|
00007a  f1b80f01          CMP      r8,#1                 ;130
00007e  d103              BNE      |L1.136|
000080  43a1              BICS     r1,r1,r4              ;131
000082  8129              STRH     r1,[r5,#8]            ;131
000084  e000              B        |L1.136|
                  |L1.134|
000086  7032              STRB     r2,[r6,#0]            ;134
                  |L1.136|
000088  f7fffffe          BL       OS_CPU_SR_Restore
00008c  e025              B        |L1.218|
                  |L1.142|
00008e  7032              STRB     r2,[r6,#0]            ;146
                  |L1.144|
000090  f7fffffe          BL       OS_CPU_SR_Restore
000094  e021              B        |L1.218|
                  |L1.150|
000096  8929              LDRH     r1,[r5,#8]            ;153
000098  ea270401          BIC      r4,r7,r1              ;153
00009c  42bc              CMP      r4,r7                 ;154
00009e  d105              BNE      |L1.172|
0000a0  f1b80f01          CMP      r8,#1                 ;155
0000a4  d103              BNE      |L1.174|
0000a6  4321              ORRS     r1,r1,r4              ;156
0000a8  8129              STRH     r1,[r5,#8]            ;156
0000aa  e000              B        |L1.174|
                  |L1.172|
0000ac  7032              STRB     r2,[r6,#0]            ;159
                  |L1.174|
0000ae  f7fffffe          BL       OS_CPU_SR_Restore
0000b2  e012              B        |L1.218|
                  |L1.180|
0000b4  8929              LDRH     r1,[r5,#8]            ;165
0000b6  ea270401          BIC      r4,r7,r1              ;165
0000ba  b12c              CBZ      r4,|L1.200|
0000bc  f1b80f01          CMP      r8,#1                 ;167
0000c0  d103              BNE      |L1.202|
0000c2  4321              ORRS     r1,r1,r4              ;168
0000c4  8129              STRH     r1,[r5,#8]            ;168
0000c6  e000              B        |L1.202|
                  |L1.200|
0000c8  7032              STRB     r2,[r6,#0]            ;171
                  |L1.202|
0000ca  f7fffffe          BL       OS_CPU_SR_Restore
0000ce  e004              B        |L1.218|
                  |L1.208|
0000d0  f7fffffe          BL       OS_CPU_SR_Restore
0000d4  2400              MOVS     r4,#0                 ;179
0000d6  206f              MOVS     r0,#0x6f              ;180
0000d8  7030              STRB     r0,[r6,#0]            ;180
                  |L1.218|
0000da  4620              MOV      r0,r4                 ;183
0000dc  e8bd81f0          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

⌨️ 快捷键说明

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