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

📄 os_flag.lis

📁 ucos如何移植到单片机mega128
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00AA A222              and R10,R18
 00AC                   .dbline 123
 00AC           ;              if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag set                      */
 00AC 61F0              breq L19
 00AE                   .dbline 123
 00AE                   .dbline 124
 00AE           ;                  if (consume == TRUE) {                    /* See if we need to consume the flags      */
 00AE 8C2D              mov R24,R12
 00B0 8130              cpi R24,1
 00B2 61F4              brne L20
 00B4                   .dbline 124
 00B4                   .dbline 125
 00B4           ;                      pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we got         */
 00B4 C801              movw R24,R16
 00B6 0396              adiw R24,3
 00B8 4A2C              mov R4,R10
 00BA 4094              com R4
 00BC FC01              movw R30,R24
 00BE 5080              ldd R5,z+0
 00C0 5420              and R5,R4
 00C2 5082              std z+0,R5
 00C4                   .dbline 126
 00C4           ;                  }
 00C4                   .dbline 127
 00C4 03C0              xjmp L20
 00C6           L19:
 00C6                   .dbline 127
 00C6           ;              } else {
 00C6                   .dbline 128
 00C6           ;                  *err  = OS_FLAG_ERR_NOT_RDY;
 00C6 88E9              ldi R24,152
 00C8 FB01              movw R30,R22
 00CA 8083              std z+0,R24
 00CC                   .dbline 129
 00CC           ;              }
 00CC           L20:
 00CC                   .dbline 130
 00CC           ;              flags_cur = pgrp->OSFlagFlags;                /* Will return the state of the group       */
 00CC F801              movw R30,R16
 00CE 4381              ldd R20,z+3
 00D0                   .dbline 131
 00D0           ;              OS_EXIT_CRITICAL();
 00D0 0A93              st -y,r16
 00D2 0F91              pop r16
 00D4 0FBF              out 0x3F,r16
 00D6 0991              ld r16,y+
 00D8                   .dbline 131
 00D8                   .dbline 132
 00D8           ;              break;
 00D8 3BC0              xjmp L11
 00DA           L23:
 00DA                   .dbline 136
 00DA           ; 
 00DA           ; #if OS_FLAG_WAIT_CLR_EN > 0
 00DA           ;         case OS_FLAG_WAIT_CLR_ALL:                         /* See if all required flags are cleared    */
 00DA           ;              flags_rdy = ~pgrp->OSFlagFlags & flags;       /* Extract only the bits we want            */
 00DA F801              movw R30,R16
 00DC A380              ldd R10,z+3
 00DE A094              com R10
 00E0 A222              and R10,R18
 00E2                   .dbline 137
 00E2           ;              if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
 00E2 A216              cp R10,R18
 00E4 51F4              brne L24
 00E6                   .dbline 137
 00E6                   .dbline 138
 00E6           ;                  if (consume == TRUE) {                    /* See if we need to consume the flags      */
 00E6 8C2D              mov R24,R12
 00E8 8130              cpi R24,1
 00EA 51F4              brne L25
 00EC                   .dbline 138
 00EC                   .dbline 139
 00EC           ;                      pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we wanted        */
 00EC C801              movw R24,R16
 00EE 0396              adiw R24,3
 00F0 FC01              movw R30,R24
 00F2 4080              ldd R4,z+0
 00F4 4A28              or R4,R10
 00F6 4082              std z+0,R4
 00F8                   .dbline 140
 00F8           ;                  }
 00F8                   .dbline 141
 00F8 03C0              xjmp L25
 00FA           L24:
 00FA                   .dbline 141
 00FA           ;              } else {
 00FA                   .dbline 142
 00FA           ;                  *err  = OS_FLAG_ERR_NOT_RDY;
 00FA 88E9              ldi R24,152
 00FC FB01              movw R30,R22
 00FE 8083              std z+0,R24
 0100                   .dbline 143
 0100           ;              }
 0100           L25:
 0100                   .dbline 144
 0100           ;              flags_cur = pgrp->OSFlagFlags;                /* Will return the state of the group       */
 0100 F801              movw R30,R16
 0102 4381              ldd R20,z+3
 0104                   .dbline 145
 0104           ;              OS_EXIT_CRITICAL();
 0104 0A93              st -y,r16
 0106 0F91              pop r16
 0108 0FBF              out 0x3F,r16
 010A 0991              ld r16,y+
 010C                   .dbline 145
 010C                   .dbline 146
 010C           ;              break;
 010C 21C0              xjmp L11
 010E           L28:
 010E                   .dbline 149
 010E           ; 
 010E           ;         case OS_FLAG_WAIT_CLR_ANY:
 010E           ;              flags_rdy = ~pgrp->OSFlagFlags & flags;       /* Extract only the bits we want            */
 010E F801              movw R30,R16
 0110 A380              ldd R10,z+3
 0112 A094              com R10
 0114 A222              and R10,R18
 0116                   .dbline 150
 0116           ;              if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag cleared                  */
 0116 51F0              breq L29
 0118                   .dbline 150
 0118                   .dbline 151
 0118           ;                  if (consume == TRUE) {                    /* See if we need to consume the flags      */
 0118 8C2D              mov R24,R12
 011A 8130              cpi R24,1
 011C 51F4              brne L30
 011E                   .dbline 151
 011E                   .dbline 152
 011E           ;                      pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we got           */
 011E C801              movw R24,R16
 0120 0396              adiw R24,3
 0122 FC01              movw R30,R24
 0124 4080              ldd R4,z+0
 0126 4A28              or R4,R10
 0128 4082              std z+0,R4
 012A                   .dbline 153
 012A           ;                  }
 012A                   .dbline 154
 012A 03C0              xjmp L30
 012C           L29:
 012C                   .dbline 154
 012C           ;              } else {
 012C                   .dbline 155
 012C           ;                  *err  = OS_FLAG_ERR_NOT_RDY;
 012C 88E9              ldi R24,152
 012E FB01              movw R30,R22
 0130 8083              std z+0,R24
 0132                   .dbline 156
 0132           ;              }
 0132           L30:
 0132                   .dbline 157
 0132           ;              flags_cur = pgrp->OSFlagFlags;                /* Will return the state of the group       */
 0132 F801              movw R30,R16
 0134 4381              ldd R20,z+3
 0136                   .dbline 158
 0136           ;              OS_EXIT_CRITICAL();
 0136 0A93              st -y,r16
 0138 0F91              pop r16
 013A 0FBF              out 0x3F,r16
 013C 0991              ld r16,y+
 013E                   .dbline 158
 013E                   .dbline 159
 013E           ;              break;
 013E 08C0              xjmp L11
 0140           L10:
 0140                   .dbline 163
 0140           ; #endif
 0140           ; 
 0140           ;         default:
 0140           ;              OS_EXIT_CRITICAL();
 0140 0A93              st -y,r16
 0142 0F91              pop r16
 0144 0FBF              out 0x3F,r16
 0146 0991              ld r16,y+
 0148                   .dbline 163
 0148                   .dbline 164
 0148           ;              flags_cur = (OS_FLAGS)0;
 0148 4427              clr R20
 014A                   .dbline 165
 014A           ;              *err      = OS_FLAG_ERR_WAIT_TYPE;
 014A 87E9              ldi R24,151
 014C FB01              movw R30,R22
 014E 8083              std z+0,R24
 0150                   .dbline 166
 0150           ;              break;
 0150           L11:
 0150                   .dbline 168
 0150           ;     }
 0150           ;     return (flags_cur);
 0150 042F              mov R16,R20
 0152                   .dbline -2
 0152           L3:
 0152 0E940000          xcall pop_gset4
 0156                   .dbline 0 ; func end
 0156 0895              ret
 0158                   .dbsym r flags_rdy 10 c
 0158                   .dbsym r consume 12 c
 0158                   .dbsym r flags_cur 20 c
 0158                   .dbsym r err 22 pc
 0158                   .dbsym r wait_type 20 c
 0158                   .dbsym r flags 18 c
 0158                   .dbsym r pgrp 16 pS[.1]
 0158                   .dbend
 0158                   .dbfunc e OSFlagCreate _OSFlagCreate fpS[.1]
 0158           ;           pgrp -> R20,R21
 0158           ;            err -> R18,R19
 0158           ;          flags -> R16
                        .even
 0158           _OSFlagCreate::
 0158 0E940000          xcall push_gset1
 015C                   .dbline -1
 015C                   .dbline 194
 015C           ; }
 015C           ; #endif
 015C           ; 
 015C           ; /*$PAGE*/
 015C           ; /*
 015C           ; *********************************************************************************************************
 015C           ; *                                           CREATE AN EVENT FLAG
 015C           ; *
 015C           ; * Description: This function is called to create an event flag group.
 015C           ; *
 015C           ; * Arguments  : flags         Contains the initial value to store in the event flag group.
 015C           ; *
 015C           ; *              err           is a pointer to an error code which will be returned to your application:
 015C           ; *                               OS_NO_ERR                if the call was successful.
 015C           ; *                               OS_ERR_CREATE_ISR        if you attempted to create an Event Flag from an
 015C           ; *                                                        ISR.
 015C           ; *                               OS_FLAG_GRP_DEPLETED     if there are no more event flag groups
 015C           ; *
 015C           ; * Returns    : A pointer to an event flag group or a NULL pointer if no more groups are available.
 015C           ; *
 015C           ; * Called from: Task ONLY
 015C           ; *********************************************************************************************************
 015C           ; */
 015C           ; 
 015C           ; OS_FLAG_GRP  *OSFlagCreate (OS_FLAGS flags, INT8U *err)
 015C           ; {
 015C                   .dbline 201
 015C           ; #if OS_CRITICAL_METHOD == 3                         /* Allocate storage for CPU status register        */
 015C           ;     OS_CPU_SR    cpu_sr;
 015C           ; #endif
 015C           ;     OS_FLAG_GRP *pgrp;
 015C           ; 
 015C           ; 
 015C           ;     if (OSIntNesting > 0) {                         /* See if called from ISR ...                      */
 015C 2224              clr R2
 015E 30900000          lds R3,_OSIntNesting
 0162 2314              cp R2,R3
 0164 30F4              brsh L34
 0166                   .dbline 201
 0166                   .dbline 202
 0166           ;         *err = OS_ERR_CREATE_ISR;                   /* ... can't CREATE from an ISR                    */
 0166 8DE8              ldi R24,141
 0168 F901              movw R30,R18
 016A 8083              std z+0,R24
 016C                   .dbline 203
 016C           ;         return ((OS_FLAG_GRP *)0);
 016C 0027              clr R16
 016E 1127              clr R17
 0170 2EC0              xjmp L33
 0172           L34:
 0172                   .dbline 205
 0172           ;     }
 0172           ;     OS_ENTER_CRITICAL();
 0172 0A93              st -y,r16
 0174 0FB7              in r16,0x3F
 0176 F894              cli
 0178 0F93              push r16
 017A 0991              ld r16,y+
 017C                   .dbline 205
 017C                   .dbline 206
 017C           ;     pgrp = OSFlagFreeList;                          /* Get next free event flag                        */
 017C 40910000          lds R20,_OSFlagFreeList
 0180 50910100          lds R21,_OSFlagFreeList+1
 0184                   .dbline 207

⌨️ 快捷键说明

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