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

📄 os_flag.txt

📁 ucos2 is a file system for embedded applications which can be used on any media, for which you can p
💻 TXT
📖 第 1 页 / 共 5 页
字号:
000698  13580003          CMPNE    r8,#3                 ;700
00069c  1a000007          BNE      |L1.1728|
0006a0  e1d400b8          LDRH     r0,[r4,#8]            ;703
0006a4  e1c00007          BIC      r0,r0,r7              ;703
                  |L1.1704|
0006a8  e1c400b8          STRH     r0,[r4,#8]            ;709
                  |L1.1708|
0006ac  e1a0000c          MOV      r0,r12                ;718
0006b0  ebfffffe          BL       OS_CPU_SR_Restore
0006b4  e1a00007          MOV      r0,r7                 ;720
0006b8  e5c5a000          STRB     r10,[r5,#0]           ;719
0006bc  eaffffc5          B        |L1.1496|
                  |L1.1728|
0006c0  e1a0000c          MOV      r0,r12                ;713
0006c4  ebfffffe          BL       OS_CPU_SR_Restore
0006c8  e3a0006f          MOV      r0,#0x6f              ;714
                  |L1.1740|
0006cc  e5c50000          STRB     r0,[r5,#0]            ;714
0006d0  e3a00000          MOV      r0,#0                 ;715
0006d4  eaffffbf          B        |L1.1496|
;;;722    /*$PAGE*/
                          ENDP

                  OSFlagPendGetFlagsRdy PROC
;;;738    OS_FLAGS  OSFlagPendGetFlagsRdy (void)
;;;739    {
0006d8  e92d4010          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();
0006dc  ebfffffe          BL       OS_CPU_SR_Save
;;;748        flags = OSTCBCur->OSTCBFlagsRdy;
0006e0  e59f1210          LDR      r1,|L1.2296|
0006e4  e5911000          LDR      r1,[r1,#0]  ; OSTCBCur
0006e8  e1d142b8          LDRH     r4,[r1,#0x28]
;;;749        OS_EXIT_CRITICAL();
0006ec  ebfffffe          BL       OS_CPU_SR_Restore
;;;750        return (flags);
0006f0  e1a00004          MOV      r0,r4
0006f4  e8bd4010          POP      {r4,lr}
;;;751    }
0006f8  e12fff1e          BX       lr
;;;752    
                          ENDP

                  OSFlagPost PROC
;;;795    OS_FLAGS  OSFlagPost (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U opt, INT8U *perr)
;;;796    {
0006fc  e92d41f0          PUSH     {r4-r8,lr}
000700  e1a05000          MOV      r5,r0
;;;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'                                */
;;;810            return ((OS_FLAGS)0);
;;;811        }
;;;812        if (pgrp == (OS_FLAG_GRP *)0) {                  /* Validate 'pgrp'                                */
;;;813            *perr = OS_ERR_FLAG_INVALID_PGRP;
;;;814            return ((OS_FLAGS)0);
;;;815        }
;;;816    #endif
;;;817        if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {    /* Make sure we are pointing to an event flag grp */
000704  e5d00000          LDRB     r0,[r0,#0]
000708  e1a06001          MOV      r6,r1                 ;796
00070c  e1a04002          MOV      r4,r2                 ;796
000710  e3500005          CMP      r0,#5
000714  e1a07003          MOV      r7,r3                 ;796
;;;818            *perr = OS_ERR_EVENT_TYPE;
000718  13a00001          MOVNE    r0,#1
;;;819            return ((OS_FLAGS)0);
00071c  1a000041          BNE      |L1.2088|
;;;820        }
;;;821    /*$PAGE*/
;;;822        OS_ENTER_CRITICAL();
000720  ebfffffe          BL       OS_CPU_SR_Save
;;;823        switch (opt) {
000724  e3540000          CMP      r4,#0
000728  e1a08000          MOV      r8,r0                 ;822
;;;824            case OS_FLAG_CLR:
;;;825                 pgrp->OSFlagFlags &= ~flags;            /* Clear the flags specified in the group         */
00072c  01d500b8          LDRHEQ   r0,[r5,#8]
000730  01c00006          BICEQ    r0,r0,r6
;;;826                 break;
000734  0a000003          BEQ      |L1.1864|
000738  e3540001          CMP      r4,#1                 ;823
00073c  1a000005          BNE      |L1.1880|
;;;827    
;;;828            case OS_FLAG_SET:
;;;829                 pgrp->OSFlagFlags |=  flags;            /* Set   the flags specified in the group         */
000740  e1d500b8          LDRH     r0,[r5,#8]
000744  e1800006          ORR      r0,r0,r6
                  |L1.1864|
000748  e1c500b8          STRH     r0,[r5,#8]            ;825
;;;830                 break;
;;;831    
;;;832            default:
;;;833                 OS_EXIT_CRITICAL();                     /* INVALID option                                 */
;;;834                 *perr = OS_ERR_FLAG_INVALID_OPT;
;;;835                 return ((OS_FLAGS)0);
;;;836        }
;;;837        sched = OS_FALSE;                                /* Indicate that we don't need rescheduling       */
;;;838        pnode = (OS_FLAG_NODE *)pgrp->OSFlagWaitList;
00074c  e5954004          LDR      r4,[r5,#4]
000750  e3a06000          MOV      r6,#0                 ;837
;;;839        while (pnode != (OS_FLAG_NODE *)0) {             /* Go through all tasks waiting on event flag(s)  */
000754  ea000022          B        |L1.2020|
                  |L1.1880|
000758  e1a00008          MOV      r0,r8                 ;833
00075c  ebfffffe          BL       OS_CPU_SR_Restore
000760  e3a00071          MOV      r0,#0x71              ;834
000764  ea00002f          B        |L1.2088|
                  |L1.1896|
;;;840            switch (pnode->OSFlagNodeWaitType) {
000768  e5d41012          LDRB     r1,[r4,#0x12]
00076c  e3510000          CMP      r1,#0
;;;841                case OS_FLAG_WAIT_SET_ALL:               /* See if all req. flags are set for current node */
;;;842                     flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & pnode->OSFlagNodeFlags);
;;;843                     if (flags_rdy == pnode->OSFlagNodeFlags) {
;;;844                         rdy = OS_FlagTaskRdy(pnode, flags_rdy);  /* Make task RTR, event(s) Rx'd          */
;;;845                         if (rdy == OS_TRUE) {
;;;846                             sched = OS_TRUE;                     /* When done we will reschedule          */
;;;847                         }
;;;848                     }
;;;849                     break;
;;;850    
;;;851                case OS_FLAG_WAIT_SET_ANY:               /* See if any flag set                            */
;;;852                     flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & pnode->OSFlagNodeFlags);
;;;853                     if (flags_rdy != (OS_FLAGS)0) {
;;;854                         rdy = OS_FlagTaskRdy(pnode, flags_rdy);  /* Make task RTR, event(s) Rx'd          */
;;;855                         if (rdy == OS_TRUE) {
;;;856                             sched = OS_TRUE;                     /* When done we will reschedule          */
;;;857                         }
;;;858                     }
;;;859                     break;
;;;860    
;;;861    #if OS_FLAG_WAIT_CLR_EN > 0
;;;862                case OS_FLAG_WAIT_CLR_ALL:               /* See if all req. flags are set for current node */
;;;863                     flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & pnode->OSFlagNodeFlags);
000770  01d401b0          LDRHEQ   r0,[r4,#0x10]
000774  01d510b8          LDRHEQ   r1,[r5,#8]
000778  01c01001          BICEQ    r1,r0,r1
;;;864                     if (flags_rdy == pnode->OSFlagNodeFlags) {
00077c  0a000011          BEQ      |L1.1992|
000780  e3510001          CMP      r1,#1                 ;840
;;;865                         rdy = OS_FlagTaskRdy(pnode, flags_rdy);  /* Make task RTR, event(s) Rx'd          */
;;;866                         if (rdy == OS_TRUE) {
;;;867                             sched = OS_TRUE;                     /* When done we will reschedule          */
;;;868                         }
;;;869                     }
;;;870                     break;
;;;871    
;;;872                case OS_FLAG_WAIT_CLR_ANY:               /* See if any flag set                            */
;;;873                     flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & pnode->OSFlagNodeFlags);
000784  01d401b0          LDRHEQ   r0,[r4,#0x10]
000788  01d510b8          LDRHEQ   r1,[r5,#8]
00078c  01c01001          BICEQ    r1,r0,r1
;;;874                     if (flags_rdy != (OS_FLAGS)0) {
000790  0a000006          BEQ      |L1.1968|
000794  e3510002          CMP      r1,#2                 ;840
000798  0a000007          BEQ      |L1.1980|
00079c  e3510003          CMP      r1,#3                 ;840
0007a0  1a00001d          BNE      |L1.2076|
0007a4  e1d500b8          LDRH     r0,[r5,#8]            ;852
0007a8  e1d411b0          LDRH     r1,[r4,#0x10]         ;852
0007ac  e0011000          AND      r1,r1,r0              ;852
                  |L1.1968|
0007b0  e3510000          CMP      r1,#0
0007b4  0a000009          BEQ      |L1.2016|
0007b8  ea000004          B        |L1.2000|
                  |L1.1980|
0007bc  e1d510b8          LDRH     r1,[r5,#8]            ;842
0007c0  e1d401b0          LDRH     r0,[r4,#0x10]         ;842
0007c4  e0011000          AND      r1,r1,r0              ;842
                  |L1.1992|
0007c8  e1500001          CMP      r0,r1                 ;864
0007cc  1a000003          BNE      |L1.2016|
                  |L1.2000|
;;;875                         rdy = OS_FlagTaskRdy(pnode, flags_rdy);  /* Make task RTR, event(s) Rx'd          */
0007d0  e1a00004          MOV      r0,r4
0007d4  ebfffffe          BL       OS_FlagTaskRdy
;;;876                         if (rdy == OS_TRUE) {
0007d8  e3500001          CMP      r0,#1
;;;877                             sched = OS_TRUE;                     /* When done we will reschedule          */
0007dc  03a06001          MOVEQ    r6,#1
                  |L1.2016|
;;;878                         }
;;;879                     }
;;;880                     break;
;;;881    #endif
;;;882                default:
;;;883                     OS_EXIT_CRITICAL();
;;;884                     *perr = OS_ERR_FLAG_WAIT_TYPE;
;;;885                     return ((OS_FLAGS)0);
;;;886            }
;;;887            pnode = (OS_FLAG_NODE *)pnode->OSFlagNodeNext; /* Point to next task waiting for event flag(s) */
0007e0  e5944000          LDR      r4,[r4,#0]
                  |L1.2020|
0007e4  e3540000          CMP      r4,#0                 ;839
0007e8  1affffde          BNE      |L1.1896|
;;;888        }
;;;889        OS_EXIT_CRITICAL();
0007ec  e1a00008          MOV      r0,r8
0007f0  ebfffffe          BL       OS_CPU_SR_Restore
;;;890        if (sched == OS_TRUE) {
0007f4  e3560001          CMP      r6,#1
;;;891            OS_Sched();
0007f8  0bfffffe          BLEQ     OS_Sched
;;;892        }
;;;893        OS_ENTER_CRITICAL();
0007fc  ebfffffe          BL       OS_CPU_SR_Save
;;;894        flags_cur = pgrp->OSFlagFlags;
000800  e1d540b8          LDRH     r4,[r5,#8]
;;;895        OS_EXIT_CRITICAL();
000804  ebfffffe          BL       OS_CPU_SR_Restore
;;;896        *perr     = OS_ERR_NONE;
000808  e3a00000          MOV      r0,#0
00080c  e5c70000          STRB     r0,[r7,#0]
;;;897        return (flags_cur);
000810  e1a00004          MOV      r0,r4
                  |L1.2068|
000814  e8bd41f0          POP      {r4-r8,lr}
;;;898    }
000818  e12fff1e          BX       lr
                  |L1.2076|
00081c  e1a00008          MOV      r0,r8                 ;883
000820  ebfffffe          BL       OS_CPU_SR_Restore
000824  e3a0006f          MOV      r0,#0x6f              ;884
                  |L1.2088|
000828  e5c70000          STRB     r0,[r7,#0]            ;884
00082c  e3a00000          MOV      r0,#0                 ;885
000830  eafffff7          B        |L1.2068|
;;;899    /*$PAGE*/
                          ENDP

                  OSFlagQuery PROC
;;;920    OS_FLAGS  OSFlagQuery (OS_FLAG_GRP *pgrp, INT8U *perr)
;;;921   

⌨️ 快捷键说明

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