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

📄 os_flag.txt

📁 ucos2.86版本结合STM板极支持包
💻 TXT
📖 第 1 页 / 共 5 页
字号:
00052e  8128              STRH     r0,[r5,#8]
                  |L1.1328|
;;;642                     }
;;;643                     OSTCBCur->OSTCBFlagsRdy = flags_rdy;      /* Save flags that were ready               */
000530  f8daf8da          LDR      r0,[r10,#0]  ; OSTCBCur
000534  f8a0f8a0          STRH     r11,[r0,#0x28]
;;;644                     OS_EXIT_CRITICAL();                       /* Yes, condition met, return to caller     */
000538  9801              LDR      r0,[sp,#4]
00053a  f7fff7ff          BL       OS_CPU_SR_Restore
;;;645                     *perr                   = OS_ERR_NONE;
00053e  f884f884          STRB     r9,[r4,#0]
;;;646                     return (flags_rdy);
000542  4658              MOV      r0,r11
000544  e7c3              B        |L1.1230|
                  |L1.1350|
;;;647                 } else {                                      /* Block task until events occur or timeout */
;;;648                     OS_FlagBlock(pgrp, &node, flags, wait_type, timeout);
000546  9b0a              LDR      r3,[sp,#0x28]
000548  9300              STR      r3,[sp,#0]
00054a  4643              MOV      r3,r8
00054c  463a              MOV      r2,r7
00054e  a902              ADD      r1,sp,#8
000550  4628              MOV      r0,r5
000552  f7fff7ff          BL       OS_FlagBlock
;;;649                     OS_EXIT_CRITICAL();
000556  9801              LDR      r0,[sp,#4]
000558  f7fff7ff          BL       OS_CPU_SR_Restore
00055c  e022              B        |L1.1444|
00055e  e000              B        |L1.1378|
                  |L1.1376|
000560  e03f              B        |L1.1506|
                  |L1.1378|
;;;650                 }
;;;651                 break;
;;;652    
;;;653            case OS_FLAG_WAIT_CLR_ANY:
;;;654                 flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want      */
000562  8928              LDRH     r0,[r5,#8]
000564  ea27ea27          BIC      r11,r7,r0
;;;655                 if (flags_rdy != (OS_FLAGS)0) {               /* See if any flag cleared                  */
000568  f1bbf1bb          CMP      r11,#0
00056c  d00f              BEQ      |L1.1422|
;;;656                     if (consume == OS_TRUE) {                 /* See if we need to consume the flags      */
00056e  2e01              CMP      r6,#1
000570  d102              BNE      |L1.1400|
;;;657                         pgrp->OSFlagFlags |= flags_rdy;       /* Set ONLY the flags that we got           */
000572  ea40ea40          ORR      r0,r0,r11
000576  8128              STRH     r0,[r5,#8]
                  |L1.1400|
;;;658                     }
;;;659                     OSTCBCur->OSTCBFlagsRdy = flags_rdy;      /* Save flags that were ready               */
000578  f8daf8da          LDR      r0,[r10,#0]  ; OSTCBCur
00057c  f8a0f8a0          STRH     r11,[r0,#0x28]
;;;660                     OS_EXIT_CRITICAL();                       /* Yes, condition met, return to caller     */
000580  9801              LDR      r0,[sp,#4]
000582  f7fff7ff          BL       OS_CPU_SR_Restore
;;;661                     *perr                   = OS_ERR_NONE;
000586  f884f884          STRB     r9,[r4,#0]
;;;662                     return (flags_rdy);
00058a  4658              MOV      r0,r11
00058c  e79f              B        |L1.1230|
                  |L1.1422|
;;;663                 } else {                                      /* Block task until events occur or timeout */
;;;664                     OS_FlagBlock(pgrp, &node, flags, wait_type, timeout);
00058e  9b0a              LDR      r3,[sp,#0x28]
000590  9300              STR      r3,[sp,#0]
000592  4643              MOV      r3,r8
000594  463a              MOV      r2,r7
000596  a902              ADD      r1,sp,#8
000598  4628              MOV      r0,r5
00059a  f7fff7ff          BL       OS_FlagBlock
;;;665                     OS_EXIT_CRITICAL();
00059e  9801              LDR      r0,[sp,#4]
0005a0  f7fff7ff          BL       OS_CPU_SR_Restore
                  |L1.1444|
;;;666                 }
;;;667                 break;
;;;668    #endif
;;;669    
;;;670            default:
;;;671                 OS_EXIT_CRITICAL();
;;;672                 flags_rdy = (OS_FLAGS)0;
;;;673                 *perr      = OS_ERR_FLAG_WAIT_TYPE;
;;;674                 return (flags_rdy);
;;;675        }
;;;676    /*$PAGE*/
;;;677        OS_Sched();                                            /* Find next HPT ready to run               */
0005a4  f7fff7ff          BL       OS_Sched
;;;678        OS_ENTER_CRITICAL();
0005a8  f7fff7ff          BL       OS_CPU_SR_Save
0005ac  4607              MOV      r7,r0
;;;679        if (OSTCBCur->OSTCBStatPend != OS_STAT_PEND_OK) {      /* Have we timed-out or aborted?            */
0005ae  f8daf8da          LDR      r0,[r10,#0]  ; OSTCBCur
0005b2  f890f890          LDRB     r11,[r0,#0x2d]
0005b6  f1bbf1bb          CMP      r11,#0
0005ba  d01c              BEQ      |L1.1526|
;;;680            pend_stat                = OSTCBCur->OSTCBStatPend;
;;;681            OSTCBCur->OSTCBStatPend  = OS_STAT_PEND_OK;
0005bc  f880f880          STRB     r9,[r0,#0x2d]
;;;682            OS_FlagUnlink(&node);
0005c0  a802              ADD      r0,sp,#8
0005c2  f7fff7ff          BL       OS_FlagUnlink
;;;683            OSTCBCur->OSTCBStat      = OS_STAT_RDY;            /* Yes, make task ready-to-run              */
0005c6  f8daf8da          LDR      r0,[r10,#0]  ; OSTCBCur
0005ca  f880f880          STRB     r9,[r0,#0x2c]
;;;684            OS_EXIT_CRITICAL();
0005ce  4638              MOV      r0,r7
0005d0  f7fff7ff          BL       OS_CPU_SR_Restore
;;;685            flags_rdy                = (OS_FLAGS)0;
0005d4  2000              MOVS     r0,#0
;;;686            switch (pend_stat) {
0005d6  f1bbf1bb          CMP      r11,#2
0005da  d009              BEQ      |L1.1520|
;;;687                case OS_STAT_PEND_TO:
;;;688                default:
;;;689                     *perr = OS_ERR_TIMEOUT;                    /* Indicate that we timed-out waiting       */
0005dc  210a              MOVS     r1,#0xa
0005de  7021              STRB     r1,[r4,#0]
;;;690                     break;
0005e0  e775              B        |L1.1230|
                  |L1.1506|
0005e2  9801              LDR      r0,[sp,#4]
0005e4  f7fff7ff          BL       OS_CPU_SR_Restore
0005e8  2000              MOVS     r0,#0
0005ea  216f              MOVS     r1,#0x6f
0005ec  7021              STRB     r1,[r4,#0]
0005ee  e76e              B        |L1.1230|
                  |L1.1520|
;;;691    
;;;692                case OS_STAT_PEND_ABORT:
;;;693                     *perr = OS_ERR_PEND_ABORT;                 /* Indicate that we aborted   waiting       */
0005f0  210e              MOVS     r1,#0xe
0005f2  7021              STRB     r1,[r4,#0]
;;;694                     break;
0005f4  e76b              B        |L1.1230|
                  |L1.1526|
;;;695            }
;;;696            return (flags_rdy);
;;;697        }
;;;698        flags_rdy = OSTCBCur->OSTCBFlagsRdy;
0005f6  f8b0f8b0          LDRH     r10,[r0,#0x28]
;;;699        if (consume == OS_TRUE) {                              /* See if we need to consume the flags      */
0005fa  2e01              CMP      r6,#1
0005fc  d114              BNE      |L1.1576|
;;;700            switch (wait_type) {
0005fe  f1b8f1b8          CMP      r8,#0
000602  d00d              BEQ      |L1.1568|
000604  f1b8f1b8          CMP      r8,#1
000608  d00a              BEQ      |L1.1568|
00060a  f1b8f1b8          CMP      r8,#2
00060e  d002              BEQ      |L1.1558|
000610  f1b8f1b8          CMP      r8,#3
000614  d10f              BNE      |L1.1590|
                  |L1.1558|
;;;701                case OS_FLAG_WAIT_SET_ALL:
;;;702                case OS_FLAG_WAIT_SET_ANY:                     /* Clear ONLY the flags we got              */
;;;703                     pgrp->OSFlagFlags &= ~flags_rdy;
000616  8928              LDRH     r0,[r5,#8]
000618  ea20ea20          BIC      r0,r0,r10
00061c  8128              STRH     r0,[r5,#8]
;;;704                     break;
00061e  e003              B        |L1.1576|
                  |L1.1568|
;;;705    
;;;706    #if OS_FLAG_WAIT_CLR_EN > 0
;;;707                case OS_FLAG_WAIT_CLR_ALL:
;;;708                case OS_FLAG_WAIT_CLR_ANY:                     /* Set   ONLY the flags we got              */
;;;709                     pgrp->OSFlagFlags |=  flags_rdy;
000620  8928              LDRH     r0,[r5,#8]
000622  ea40ea40          ORR      r0,r0,r10
000626  8128              STRH     r0,[r5,#8]
                  |L1.1576|
000628  4638              MOV      r0,r7
00062a  f7fff7ff          BL       OS_CPU_SR_Restore
00062e  f884f884          STRB     r9,[r4,#0]
000632  4650              MOV      r0,r10
;;;710                     break;
;;;711    #endif
;;;712                default:
;;;713                     OS_EXIT_CRITICAL();
;;;714                     *perr = OS_ERR_FLAG_WAIT_TYPE;
;;;715                     return ((OS_FLAGS)0);
;;;716            }
;;;717        }
;;;718        OS_EXIT_CRITICAL();
;;;719        *perr = OS_ERR_NONE;                                   /* Event(s) must have occurred              */
;;;720        return (flags_rdy);
000634  e74b              B        |L1.1230|
                  |L1.1590|
000636  4638              MOV      r0,r7
000638  f7fff7ff          BL       OS_CPU_SR_Restore
00063c  206f              MOVS     r0,#0x6f
00063e  7020              STRB     r0,[r4,#0]
000640  2000              MOVS     r0,#0
000642  e744              B        |L1.1230|
;;;721    }
;;;722    /*$PAGE*/
                          ENDP

                  OSFlagPendGetFlagsRdy PROC
;;;738    OS_FLAGS  OSFlagPendGetFlagsRdy (void)
;;;739    {
000644  b510              PUSH     {r4,lr}
;;;740        OS_FLAGS      flags;
;;;741    #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;;;742        OS_CPU_SR     cpu_sr = 0;
;;;743    #endif
;;;744    
;;;745    
;;;746    
;;;747        OS_ENTER_CRITICAL();
000646  f7fff7ff          BL       OS_CPU_SR_Save
;;;748        flags = OSTCBCur->OSTCBFlagsRdy;
00064a  4965              LDR      r1,|L1.2016|
00064c  6809              LDR      r1,[r1,#0]  ; OSTCBCur
00064e  8d0c              LDRH     r4,[r1,#0x28]
;;;749        OS_EXIT_CRITICAL();
000650  f7fff7ff          BL       OS_CPU_SR_Restore
;;;750        return (flags);
000654  4620              MOV      r0,r4
;;;751    }
000656  bd10              POP      {r4,pc}
;;;752    
                          ENDP

                  OSFlagPost PROC
;;;795    OS_FLAGS  OSFlagPost (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U opt, INT8U *perr)
;;;796    {
000658  e92de92d          PUSH     {r4-r8,lr}
00065c  4605              MOV      r5,r0
00065e  460e              MOV      r6,r1
000660  4614              MOV      r4,r2
000662  461f              MOV      r7,r3
;;;797        OS_FLAG_NODE *pnode;
;;;798        BOOLEAN       sched;
;;;799        OS_FLAGS      flags_cur;
;;;800        OS_FLAGS      flags_rdy;
;;;801        BOOLEAN       rdy;
;;;802    #if OS_CRITICAL_METHOD == 3                          /* Allocate storage for CPU status register       */
;;;803        OS_CPU_SR     cpu_sr = 0;
;;;804    #endif
;;;805    
;;;806    
;;;807    
;;;808    #if OS_ARG_CHK_EN > 0
;;;809        if (perr == (INT8U *)0) {                        /* Validate 'perr'                                */
000664  b917              CBNZ     r7,|L1.1644|
;;;810            return ((OS_FLAGS)0);
000666  2000              MOVS     r0,#0
000668  e8bde8bd          POP      {r4-r8,pc}
                  |L1.1644|
;;;811        }
;;;812        if (pgrp == (OS_FLAG_GRP *)0) {                  /* Validate 'pgrp'                                */
00066c  b925              CBNZ     r5,|L1.1656|
;;;813            *perr = OS_ERR_FLAG_INVALID_PGRP;
00066e  206e              MOVS     r0,#0x6e
000670  7038              STRB     r0,[r7,#0]
;;;814            return ((OS_FLAGS)0);
000672  2000              MOVS     r0,#0
000674  e8bde8bd          POP      {r4-r8,pc}
                  |L1.1656|
;;;815        }
;;;816    #endif
;;;817        if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {    /* Make sure we are poi

⌨️ 快捷键说明

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