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

📄 os_flag.lis

📁 ucos如何移植到单片机mega128
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0340 0027              clr R16
 0342 4FC1              xjmp L59
 0344           L64:
 0344                   .dbline 402
 0344           ;     }
 0344           ; #endif
 0344           ;     if (wait_type & OS_FLAG_CONSUME) {                     /* See if we need to consume the flags      */
 0344 C7FE              sbrs R12,7
 0346 06C0              rjmp L66
 0348                   .dbline 402
 0348                   .dbline 403
 0348           ;         wait_type &= ~OS_FLAG_CONSUME;
 0348 8C2D              mov R24,R12
 034A 8F77              andi R24,127
 034C C82E              mov R12,R24
 034E                   .dbline 404
 034E           ;         consume    = TRUE;
 034E EE24              clr R14
 0350 E394              inc R14
 0352                   .dbline 405
 0352 01C0              xjmp L67
 0354           L66:
 0354                   .dbline 405
 0354           ;     } else {
 0354                   .dbline 406
 0354           ;         consume    = FALSE;
 0354 EE24              clr R14
 0356                   .dbline 407
 0356           ;     }
 0356           L67:
 0356                   .dbline 409
 0356           ; /*$PAGE*/
 0356           ;     OS_ENTER_CRITICAL();
 0356 0A93              st -y,r16
 0358 0FB7              in r16,0x3F
 035A F894              cli
 035C 0F93              push r16
 035E 0991              ld r16,y+
 0360                   .dbline 409
 0360                   .dbline 410
 0360 4C2D              mov R20,R12
 0362 5527              clr R21
 0364 4030              cpi R20,0
 0366 4507              cpc R20,R21
 0368 09F4              brne X16
 036A 70C0              xjmp L81
 036C           X16:
 036C           X12:
 036C 4130              cpi R20,1
 036E E0E0              ldi R30,0
 0370 5E07              cpc R21,R30
 0372 09F4              brne X17
 0374 9BC0              xjmp L86
 0376           X17:
 0376 4230              cpi R20,2
 0378 E0E0              ldi R30,0
 037A 5E07              cpc R21,R30
 037C 31F0              breq L71
 037E 4330              cpi R20,3
 0380 E0E0              ldi R30,0
 0382 5E07              cpc R21,R30
 0384 09F4              brne X18
 0386 32C0              xjmp L76
 0388           X18:
 0388 C0C0              xjmp L68
 038A           X13:
 038A                   .dbline 410
 038A           ;     switch (wait_type) {
 038A           L71:
 038A                   .dbline 412
 038A           ;         case OS_FLAG_WAIT_SET_ALL:                         /* See if all required flags are set        */
 038A           ;              flags_rdy = pgrp->OSFlagFlags & flags;        /* Extract only the bits we want            */
 038A F301              movw R30,R6
 038C A380              ldd R10,z+3
 038E 0A8C              ldd R0,y+26
 0390 A020              and R10,R0
 0392                   .dbline 413
 0392           ;              if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
 0392 A014              cp R10,R0
 0394 B1F4              brne L72
 0396                   .dbline 413
 0396                   .dbline 414
 0396           ;                  if (consume == TRUE) {                    /* See if we need to consume the flags      */
 0396 8E2D              mov R24,R14
 0398 8130              cpi R24,1
 039A 41F4              brne L74
 039C                   .dbline 414
 039C                   .dbline 415
 039C           ;                      pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we wanted      */
 039C C301              movw R24,R6
 039E 0396              adiw R24,3
 03A0 4A2C              mov R4,R10
 03A2 4094              com R4
 03A4 FC01              movw R30,R24
 03A6 5080              ldd R5,z+0
 03A8 5420              and R5,R4
 03AA 5082              std z+0,R5
 03AC                   .dbline 416
 03AC           ;                  }
 03AC           L74:
 03AC                   .dbline 417
 03AC           ;                  flags_cur = pgrp->OSFlagFlags;            /* Will return the state of the group       */
 03AC F301              movw R30,R6
 03AE 4381              ldd R20,z+3
 03B0                   .dbline 418
 03B0           ;                  OS_EXIT_CRITICAL();                       /* Yes, condition met, return to caller     */
 03B0 0A93              st -y,r16
 03B2 0F91              pop r16
 03B4 0FBF              out 0x3F,r16
 03B6 0991              ld r16,y+
 03B8                   .dbline 418
 03B8                   .dbline 419
 03B8           ;                  *err      = OS_NO_ERR;
 03B8 2224              clr R2
 03BA FB01              movw R30,R22
 03BC 2082              std z+0,R2
 03BE                   .dbline 420
 03BE           ;                  return (flags_cur);
 03BE 042F              mov R16,R20
 03C0 10C1              xjmp L59
 03C2           L72:
 03C2                   .dbline 421
 03C2           ;              } else {                                      /* Block task until events occur or timeout */
 03C2                   .dbline 422
 03C2           ;                  OS_FlagBlock(pgrp, &node, flags, wait_type, timeout);
 03C2 0E8C              ldd R0,y+30
 03C4 1F8C              ldd R1,y+31
 03C6 1D82              std y+5,R1
 03C8 0C82              std y+4,R0
 03CA CA82              std y+2,R12
 03CC 0A8C              ldd R0,y+26
 03CE 0882              std y+0,R0
 03D0 9E01              movw R18,R28
 03D2 2A5F              subi R18,250  ; offset = 6
 03D4 3F4F              sbci R19,255
 03D6 8301              movw R16,R6
 03D8 0F93              push R16
 03DA 1F93              push R17
 03DC FCD1              xcall _OS_FlagBlock
 03DE 7F90              pop R7
 03E0 6F90              pop R6
 03E2                   .dbline 423
 03E2           ;                  OS_EXIT_CRITICAL();
 03E2 0A93              st -y,r16
 03E4 0F91              pop r16
 03E6 0FBF              out 0x3F,r16
 03E8 0991              ld r16,y+
 03EA                   .dbline 423
 03EA                   .dbline 424
 03EA           ;              }
 03EA                   .dbline 425
 03EA           ;              break;
 03EA 99C0              xjmp L69
 03EC           L76:
 03EC                   .dbline 428
 03EC           ; 
 03EC           ;         case OS_FLAG_WAIT_SET_ANY:
 03EC           ;              flags_rdy = pgrp->OSFlagFlags & flags;        /* Extract only the bits we want            */
 03EC F301              movw R30,R6
 03EE A380              ldd R10,z+3
 03F0 0A8C              ldd R0,y+26
 03F2 A020              and R10,R0
 03F4                   .dbline 429
 03F4           ;              if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag set                      */
 03F4 B1F0              breq L77
 03F6                   .dbline 429
 03F6                   .dbline 430
 03F6           ;                  if (consume == TRUE) {                    /* See if we need to consume the flags      */
 03F6 8E2D              mov R24,R14
 03F8 8130              cpi R24,1
 03FA 41F4              brne L79
 03FC                   .dbline 430
 03FC                   .dbline 431
 03FC           ;                      pgrp->OSFlagFlags &= ~flags_rdy;      /* Clear ONLY the flags that we got         */
 03FC C301              movw R24,R6
 03FE 0396              adiw R24,3
 0400 4A2C              mov R4,R10
 0402 4094              com R4
 0404 FC01              movw R30,R24
 0406 5080              ldd R5,z+0
 0408 5420              and R5,R4
 040A 5082              std z+0,R5
 040C                   .dbline 432
 040C           ;                  }
 040C           L79:
 040C                   .dbline 433
 040C           ;                  flags_cur = pgrp->OSFlagFlags;            /* Will return the state of the group       */
 040C F301              movw R30,R6
 040E 4381              ldd R20,z+3
 0410                   .dbline 434
 0410           ;                  OS_EXIT_CRITICAL();                       /* Yes, condition met, return to caller     */
 0410 0A93              st -y,r16
 0412 0F91              pop r16
 0414 0FBF              out 0x3F,r16
 0416 0991              ld r16,y+
 0418                   .dbline 434
 0418                   .dbline 435
 0418           ;                  *err      = OS_NO_ERR;
 0418 2224              clr R2
 041A FB01              movw R30,R22
 041C 2082              std z+0,R2
 041E                   .dbline 436
 041E           ;                  return (flags_cur);
 041E 042F              mov R16,R20
 0420 E0C0              xjmp L59
 0422           L77:
 0422                   .dbline 437
 0422           ;              } else {                                      /* Block task until events occur or timeout */
 0422                   .dbline 438
 0422           ;                  OS_FlagBlock(pgrp, &node, flags, wait_type, timeout);
 0422 0E8C              ldd R0,y+30
 0424 1F8C              ldd R1,y+31
 0426 1D82              std y+5,R1
 0428 0C82              std y+4,R0
 042A CA82              std y+2,R12
 042C 0A8C              ldd R0,y+26
 042E 0882              std y+0,R0
 0430 9E01              movw R18,R28
 0432 2A5F              subi R18,250  ; offset = 6
 0434 3F4F              sbci R19,255
 0436 8301              movw R16,R6
 0438 0F93              push R16
 043A 1F93              push R17
 043C CCD1              xcall _OS_FlagBlock
 043E 7F90              pop R7
 0440 6F90              pop R6
 0442                   .dbline 439
 0442           ;                  OS_EXIT_CRITICAL();
 0442 0A93              st -y,r16
 0444 0F91              pop r16
 0446 0FBF              out 0x3F,r16
 0448 0991              ld r16,y+
 044A                   .dbline 439
 044A                   .dbline 440
 044A           ;              }
 044A                   .dbline 441
 044A           ;              break;
 044A 69C0              xjmp L69
 044C           L81:
 044C                   .dbline 445
 044C           ; 
 044C           ; #if OS_FLAG_WAIT_CLR_EN > 0
 044C           ;         case OS_FLAG_WAIT_CLR_ALL:                         /* See if all required flags are cleared    */
 044C           ;              flags_rdy = ~pgrp->OSFlagFlags & flags;       /* Extract only the bits we want            */
 044C F301              movw R30,R6
 044E A380              ldd R10,z+3
 0450 A094              com R10
 0452 0A8C              ldd R0,y+26
 0454 A020              and R10,R0
 0456                   .dbline 446
 0456           ;              if (flags_rdy == flags) {                     /* Must match ALL the bits that we want     */
 0456 A014              cp R10,R0
 0458 A1F4              brne L82
 045A                   .dbline 446
 045A                   .dbline 447
 045A           ;                  if (consume == TRUE) {                    /* See if we need to consume the flags      */
 045A 8E2D              mov R24,R14
 045C 8130              cpi R24,1
 045E 31F4              brne L84
 0460                   .dbline 447
 0460                   .dbline 448
 0460           ;                      pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we wanted        */
 0460 C301              movw R24,R6
 0462 0396              adiw R24,3
 0464 FC01              movw R30,R24
 0466 4080              ldd R4,z+0
 0468 4A28              or R4,R10
 046A 4082              std z+0,R4
 046C                   .dbline 449
 046C           ;                  }
 046C           L84:
 046C                   .dbline 450
 046C           ;                  flags_cur = pgrp->OSFlagFlags;            /* Will return the st

⌨️ 快捷键说明

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