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

📄 os_flag.txt

📁 stm32 ucos 精简移殖版本 不需作任何修改直接便可运行。包含串口 定时器
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 919] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\output\os_flag.o --depend=.\output\os_flag.d --device=DARMSTM --apcs=interwork -O1 -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 -IC:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\output\os_flag.crf ..\..\..\..\..\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'                          */
;;;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                */
00000c  7828              LDRB     r0,[r5,#0]
00000e  2805              CMP      r0,#5
000010  d004              BEQ      |L1.28|
;;;113            *perr = OS_ERR_EVENT_TYPE;
000012  2001              MOVS     r0,#1
000014  7030              STRB     r0,[r6,#0]
;;;114            return ((OS_FLAGS)0);
000016  2000              MOVS     r0,#0
                  |L1.24|
;;;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    }
000018  e8bde8bd          POP      {r4-r8,pc}
                  |L1.28|
00001c  f004f004          AND      r0,r4,#0x80           ;116
000020  b120              CBZ      r0,|L1.44|
000022  f024f024          BIC      r4,r4,#0x80           ;118
000026  f04ff04f          MOV      r8,#1                 ;119
00002a  e001              B        |L1.48|
                  |L1.44|
00002c  f04ff04f          MOV      r8,#0                 ;121
                  |L1.48|
000030  2000              MOVS     r0,#0                 ;124
000032  7030              STRB     r0,[r6,#0]            ;124
000034  f7fff7ff          BL       OS_CPU_SR_Save
000038  2270              MOVS     r2,#0x70              ;126
00003a  b314              CBZ      r4,|L1.130|
00003c  2c01              CMP      r4,#1                 ;126
00003e  d02f              BEQ      |L1.160|
000040  2c02              CMP      r4,#2                 ;126
000042  d00b              BEQ      |L1.92|
000044  2c03              CMP      r4,#3                 ;126
000046  d139              BNE      |L1.188|
000048  8929              LDRH     r1,[r5,#8]            ;140
00004a  ea01ea01          AND      r4,r1,r7              ;140
00004e  b1a4              CBZ      r4,|L1.122|
000050  f1b8f1b8          CMP      r8,#1                 ;142
000054  d112              BNE      |L1.124|
000056  43a1              BICS     r1,r1,r4              ;143
000058  8129              STRH     r1,[r5,#8]            ;143
00005a  e00f              B        |L1.124|
                  |L1.92|
00005c  8929              LDRH     r1,[r5,#8]            ;128
00005e  ea01ea01          AND      r4,r1,r7              ;128
000062  42bc              CMP      r4,r7                 ;129
000064  d105              BNE      |L1.114|
000066  f1b8f1b8          CMP      r8,#1                 ;130
00006a  d103              BNE      |L1.116|
00006c  43a1              BICS     r1,r1,r4              ;131
00006e  8129              STRH     r1,[r5,#8]            ;131
000070  e000              B        |L1.116|
                  |L1.114|
000072  7032              STRB     r2,[r6,#0]            ;134
                  |L1.116|
000074  f7fff7ff          BL       OS_CPU_SR_Restore
000078  e025              B        |L1.198|
                  |L1.122|
00007a  7032              STRB     r2,[r6,#0]            ;146
                  |L1.124|
00007c  f7fff7ff          BL       OS_CPU_SR_Restore
000080  e021              B        |L1.198|
                  |L1.130|
000082  8929              LDRH     r1,[r5,#8]            ;153
000084  ea27ea27          BIC      r4,r7,r1              ;153
000088  42bc              CMP      r4,r7                 ;154
00008a  d105              BNE      |L1.152|
00008c  f1b8f1b8          CMP      r8,#1                 ;155
000090  d103              BNE      |L1.154|
000092  4321              ORRS     r1,r1,r4              ;156
000094  8129              STRH     r1,[r5,#8]            ;156
000096  e000              B        |L1.154|
                  |L1.152|
000098  7032              STRB     r2,[r6,#0]            ;159
                  |L1.154|
00009a  f7fff7ff          BL       OS_CPU_SR_Restore
00009e  e012              B        |L1.198|
                  |L1.160|
0000a0  8929              LDRH     r1,[r5,#8]            ;165
0000a2  ea27ea27          BIC      r4,r7,r1              ;165
0000a6  b12c              CBZ      r4,|L1.180|
0000a8  f1b8f1b8          CMP      r8,#1                 ;167
0000ac  d103              BNE      |L1.182|
0000ae  4321              ORRS     r1,r1,r4              ;168
0000b0  8129              STRH     r1,[r5,#8]            ;168
0000b2  e000              B        |L1.182|
                  |L1.180|
0000b4  7032              STRB     r2,[r6,#0]            ;171
                  |L1.182|
0000b6  f7fff7ff          BL       OS_CPU_SR_Restore
0000ba  e004              B        |L1.198|
                  |L1.188|
0000bc  f7fff7ff          BL       OS_CPU_SR_Restore
0000c0  2400              MOVS     r4,#0                 ;179
0000c2  206f              MOVS     r0,#0x6f              ;180
0000c4  7030              STRB     r0,[r6,#0]            ;180
                  |L1.198|
0000c6  4620              MOV      r0,r4                 ;183
0000c8  e7a6              B        |L1.24|
;;;185    #endif
                          ENDP

                  OSFlagCreate PROC
;;;208    OS_FLAG_GRP  *OSFlagCreate (OS_FLAGS flags, INT8U *perr)
;;;209    {
0000ca  b570              PUSH     {r4-r6,lr}
0000cc  4606              MOV      r6,r0
0000ce  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'                                 */
;;;219            return ((OS_FLAG_GRP *)0);
;;;220        }
;;;221    #endif
;;;222        if (OSIntNesting > 0) {                         /* See if called from ISR ...                      */
0000d0  48f6              LDR      r0,|L1.1196|
0000d2  7800              LDRB     r0,[r0,#0]  ; OSIntNesting
0000d4  b118              CBZ      r0,|L1.222|
;;;223            *perr = OS_ERR_CREATE_ISR;                  /* ... can't CREATE from an ISR                    */
0000d6  2010              MOVS     r0,#0x10
0000d8  7028              STRB     r0,[r5,#0]
;;;224            return ((OS_FLAG_GRP *)0);
0000da  2000              MOVS     r0,#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        }

⌨️ 快捷键说明

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