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

📄 os_core.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
000840  e1877005          ORR      r7,r7,r5
000844  e59f82ec          LDR      r8,|L1.2872|
000848  e7c87004          STRB     r7,[r8,r4]
;;;489        }
;;;490        return (prio);
                  |L1.2124|
00084c  e8bd41f0          POP      {r4-r8,lr}
;;;491    }
000850  e12fff1e          BX       lr
                          ENDP

                  OS_EventTaskWait PROC
;;;510    {
;;;511        OSTCBCur->OSTCBEventPtr = pevent;            /* Store pointer to event control block in TCB        */
000854  e59f12ec          LDR      r1,|L1.2888|
000858  e5911000          LDR      r1,[r1,#0]  ; OSTCBCur
00085c  e581001c          STR      r0,[r1,#0x1c]
;;;512        if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0x00) {   /* Task no longer ready      */
000860  e59f12e0          LDR      r1,|L1.2888|
000864  e5911000          LDR      r1,[r1,#0]  ; OSTCBCur
000868  e5d1102f          LDRB     r1,[r1,#0x2f]
00086c  e59f22c4          LDR      r2,|L1.2872|
000870  e7d21001          LDRB     r1,[r2,r1]
000874  e59f22cc          LDR      r2,|L1.2888|
000878  e5922000          LDR      r2,[r2,#0]  ; OSTCBCur
00087c  e5d22030          LDRB     r2,[r2,#0x30]
000880  e1c11002          BIC      r1,r1,r2
000884  e21110ff          ANDS     r1,r1,#0xff
000888  e59f22b8          LDR      r2,|L1.2888|
00088c  e5922000          LDR      r2,[r2,#0]  ; OSTCBCur
000890  e5d2202f          LDRB     r2,[r2,#0x2f]
000894  e59f329c          LDR      r3,|L1.2872|
000898  e7c31002          STRB     r1,[r3,r2]
00089c  1a000007          BNE      |L1.2240|
;;;513            OSRdyGrp &= ~OSTCBCur->OSTCBBitY;        /* Clear event grp bit if this was only task pending  */
0008a0  e59f12a0          LDR      r1,|L1.2888|
0008a4  e5911000          LDR      r1,[r1,#0]  ; OSTCBCur
0008a8  e5d11031          LDRB     r1,[r1,#0x31]
0008ac  e59f2280          LDR      r2,|L1.2868|
0008b0  e5d22000          LDRB     r2,[r2,#0]  ; OSRdyGrp
0008b4  e1c21001          BIC      r1,r2,r1
0008b8  e59f2274          LDR      r2,|L1.2868|
0008bc  e5c21000          STRB     r1,[r2,#0]  ; OSRdyGrp
;;;514        }
;;;515        pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;          /* Put task in waiting list  */
                  |L1.2240|
0008c0  e59f1280          LDR      r1,|L1.2888|
0008c4  e5911000          LDR      r1,[r1,#0]  ; OSTCBCur
0008c8  e5d1102f          LDRB     r1,[r1,#0x2f]
0008cc  e2802008          ADD      r2,r0,#8
0008d0  e7d21001          LDRB     r1,[r2,r1]
0008d4  e59f226c          LDR      r2,|L1.2888|
0008d8  e5922000          LDR      r2,[r2,#0]  ; OSTCBCur
0008dc  e5d22030          LDRB     r2,[r2,#0x30]
0008e0  e1811002          ORR      r1,r1,r2
0008e4  e59f225c          LDR      r2,|L1.2888|
0008e8  e5922000          LDR      r2,[r2,#0]  ; OSTCBCur
0008ec  e5d2202f          LDRB     r2,[r2,#0x2f]
0008f0  e2803008          ADD      r3,r0,#8
0008f4  e7c31002          STRB     r1,[r3,r2]
;;;516        pevent->OSEventGrp                   |= OSTCBCur->OSTCBBitY;
0008f8  e5d01001          LDRB     r1,[r0,#1]
0008fc  e59f2244          LDR      r2,|L1.2888|
000900  e5922000          LDR      r2,[r2,#0]  ; OSTCBCur
000904  e5d22031          LDRB     r2,[r2,#0x31]
000908  e1811002          ORR      r1,r1,r2
00090c  e5c01001          STRB     r1,[r0,#1]
;;;517    }
000910  e12fff1e          BX       lr
                          ENDP

                  OS_EventTO PROC
;;;536    {
;;;537        if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0x00) {
000914  e59f122c          LDR      r1,|L1.2888|
000918  e5911000          LDR      r1,[r1,#0]  ; OSTCBCur
00091c  e5d1102f          LDRB     r1,[r1,#0x2f]
000920  e2802008          ADD      r2,r0,#8
000924  e7d21001          LDRB     r1,[r2,r1]
000928  e59f2218          LDR      r2,|L1.2888|
00092c  e5922000          LDR      r2,[r2,#0]  ; OSTCBCur
000930  e5d22030          LDRB     r2,[r2,#0x30]
000934  e1c11002          BIC      r1,r1,r2
000938  e21110ff          ANDS     r1,r1,#0xff
00093c  e59f2204          LDR      r2,|L1.2888|
000940  e5922000          LDR      r2,[r2,#0]  ; OSTCBCur
000944  e5d2202f          LDRB     r2,[r2,#0x2f]
000948  e2803008          ADD      r3,r0,#8
00094c  e7c31002          STRB     r1,[r3,r2]
000950  1a000005          BNE      |L1.2412|
;;;538            pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
000954  e5d01001          LDRB     r1,[r0,#1]
000958  e59f21e8          LDR      r2,|L1.2888|
00095c  e5922000          LDR      r2,[r2,#0]  ; OSTCBCur
000960  e5d22031          LDRB     r2,[r2,#0x31]
000964  e1c11002          BIC      r1,r1,r2
000968  e5c01001          STRB     r1,[r0,#1]
;;;539        }
;;;540        OSTCBCur->OSTCBStat     = OS_STAT_RDY;       /* Set status to ready                                */
                  |L1.2412|
00096c  e3a01000          MOV      r1,#0
000970  e59f21d0          LDR      r2,|L1.2888|
000974  e5922000          LDR      r2,[r2,#0]  ; OSTCBCur
000978  e5c2102c          STRB     r1,[r2,#0x2c]
;;;541        OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;     /* No longer waiting for event                        */
00097c  e59f21c4          LDR      r2,|L1.2888|
000980  e5922000          LDR      r2,[r2,#0]  ; OSTCBCur
000984  e582101c          STR      r1,[r2,#0x1c]
;;;542    }
000988  e12fff1e          BX       lr
                          ENDP

                  OS_EventWaitListInit PROC
;;;563    
;;;564        pevent->OSEventGrp = 0x00;                   /* No task waiting on event                           */
00098c  e3a02000          MOV      r2,#0
000990  e5c02001          STRB     r2,[r0,#1]
;;;565        ptbl               = &pevent->OSEventTbl[0];
000994  e2801008          ADD      r1,r0,#8
;;;566    
;;;567    #if OS_EVENT_TBL_SIZE > 0
;;;568        *ptbl++            = 0x00;
000998  e4c12001          STRB     r2,[r1],#1
;;;569    #endif
;;;570    
;;;571    #if OS_EVENT_TBL_SIZE > 1
;;;572        *ptbl++            = 0x00;
00099c  e4c12001          STRB     r2,[r1],#1
;;;573    #endif
;;;574    
;;;575    #if OS_EVENT_TBL_SIZE > 2
;;;576        *ptbl++            = 0x00;
;;;577    #endif
;;;578    
;;;579    #if OS_EVENT_TBL_SIZE > 3
;;;580        *ptbl++            = 0x00;
;;;581    #endif
;;;582    
;;;583    #if OS_EVENT_TBL_SIZE > 4
;;;584        *ptbl++            = 0x00;
;;;585    #endif
;;;586    
;;;587    #if OS_EVENT_TBL_SIZE > 5
;;;588        *ptbl++            = 0x00;
;;;589    #endif
;;;590    
;;;591    #if OS_EVENT_TBL_SIZE > 6
;;;592        *ptbl++            = 0x00;
;;;593    #endif
;;;594    
;;;595    #if OS_EVENT_TBL_SIZE > 7
;;;596        *ptbl              = 0x00;
;;;597    #endif
;;;598    }
0009a0  e12fff1e          BX       lr
                          ENDP

                  OS_TCBInit PROC
;;;1035   INT8U  OS_TCBInit (INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt)
;;;1036   {
0009a4  e92d5ff0          PUSH     {r4-r12,lr}
0009a8  e1a04000          MOV      r4,r0
0009ac  e1a05001          MOV      r5,r1
0009b0  e1a06002          MOV      r6,r2
0009b4  e1a07003          MOV      r7,r3
0009b8  e28da028          ADD      r10,sp,#0x28
0009bc  e89a0700          LDM      r10,{r8-r10}
;;;1037   #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;;;1038       OS_CPU_SR  cpu_sr;
;;;1039   #endif    
;;;1040       OS_TCB    *ptcb;
;;;1041   
;;;1042   
;;;1043       OS_ENTER_CRITICAL();
0009c0  ef000002          SVC      0x2  ; formerly SWI
;;;1044       ptcb = OSTCBFreeList;                                  /* Get a free TCB from the free TCB list    */
0009c4  e59f0164          LDR      r0,|L1.2864|
0009c8  e590b000          LDR      r11,[r0,#0]  ; OSTCBFreeList
;;;1045       if (ptcb != (OS_TCB *)0) {
0009cc  e35b0000          CMP      r11,#0
0009d0  0a000044          BEQ      |L1.2792|
;;;1046           OSTCBFreeList        = ptcb->OSTCBNext;            /* Update pointer to free TCB list          */
0009d4  e2801000          ADD      r1,r0,#0
0009d8  e59b0014          LDR      r0,[r11,#0x14]
0009dc  e5810000          STR      r0,[r1,#0]  ; OSTCBFreeList
;;;1047           OS_EXIT_CRITICAL();
0009e0  ef000003          SVC      0x3  ; formerly SWI
;;;1048           ptcb->OSTCBStkPtr    = ptos;                       /* Load Stack pointer in TCB                */
0009e4  e58b5000          STR      r5,[r11,#0]
;;;1049           ptcb->OSTCBPrio      = (INT8U)prio;                /* Load task priority into TCB              */
0009e8  e5cb402d          STRB     r4,[r11,#0x2d]
;;;1050           ptcb->OSTCBStat      = OS_STAT_RDY;                /* Task is ready to run                     */
0009ec  e3a00000          MOV      r0,#0
0009f0  e5cb002c          STRB     r0,[r11,#0x2c]
;;;1051           ptcb->OSTCBDly       = 0;                          /* Task is not delayed                      */
0009f4  e1cb02ba          STRH     r0,[r11,#0x2a]
;;;1052   
;;;1053   #if OS_TASK_CREATE_EXT_EN > 0
;;;1054           ptcb->OSTCBExtPtr    = pext;                       /* Store pointer to TCB extension           */
0009f8  e58b9004          STR      r9,[r11,#4]
;;;1055           ptcb->OSTCBStkSize   = stk_size;                   /* Store stack size                         */
0009fc  e58b800c          STR      r8,[r11,#0xc]
;;;1056           ptcb->OSTCBStkBottom = pbos;                       /* Store pointer to bottom of stack         */
000a00  e58b6008          STR      r6,[r11,#8]
;;;1057           ptcb->OSTCBOpt       = opt;                        /* Store task options                       */
000a04  e1cba1b0          STRH     r10,[r11,#0x10]
;;;1058           ptcb->OSTCBId        = id;                         /* Store task ID                            */
000a08  e1cb71b2          STRH     r7,[r11,#0x12]
;;;1059   #else
;;;1060           pext                 = pext;                       /* Prevent compiler warning if not used     */
;;;1061           stk_size             = stk_size;
;;;1062           pbos                 = pbos;
;;;1063           opt                  = opt;
;;;1064           id                   = id;
;;;1065   #endif
;;;1066   
;;;1067   #if OS_TASK_DEL_EN > 0
;;;1068           ptcb->OSTCBDelReq    = OS_NO_ERR;
000a0c  e5cb0032          STRB     r0,[r11,#0x32]
;;;1069   #endif
;;;1070   
;;;1071           ptcb->OSTCBY         = prio >> 3;                  /* Pre-compute X, Y, BitX and BitY          */
000a10  e1a001c4          ASR      r0,r4,#3
000a14  e5cb002f          STRB     r0,[r11,#0x2f]
;;;1072           ptcb->OSTCBBitY      = OSMapTbl[ptcb->OSTCBY];
000a18  e5db002f          LDRB     r0,[r11,#0x2f]
000a1c  e59f1148          LDR      r1,|L1.2924|
000a20  e7d10000          LDRB     r0,[r1,r0]
000a24  e5cb0031          STRB     r0,[r11,#0x31]
;;;1073           ptcb->OSTCBX         = prio & 0x07;
000a28  e2040007          AND      r0,r4,#7
000a2c  e5cb002e          STRB     r0,[r11,#0x2e]
;;;1074           ptcb->OSTCBBitX      = OSMapTbl[ptcb->OSTCBX];
000a30  e5db002e          LDRB     r0,[r11,#0x2e]
000a34  e7d10000          LDRB     r0,[r1,r0]
000a38  e5cb0030          STRB     r0,[r11,#0x30]
;;;1075   
;;;1076   #if OS_EVENT_EN > 0
;;;1077           ptcb->OSTCBEventPtr  = (OS_EVENT *)0;              /* Task is not pending on an event          */
000a3c  e3a00000          MOV      r0,#0
000a40  e58b001c          STR      r0,[r11,#0x1c]
;;;1078   #endif
;;;1079   
;;;1080   #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) && (OS_TASK_DEL_EN > 0)
;;;1081           ptcb->OSTCBFlagNode  = (OS_FLAG_NODE *)0;          /* Task is not pending on an event flag     */
000a44  e58b0024          STR      r0,[r11,#0x24]
;;;1082   #endif
;;;1083   
;;;1084   #if (OS_MBOX_EN > 0) || ((OS_Q_EN > 0) && (OS_MAX_QS > 0))
;;;1085           ptcb->OSTCBMsg       = (void *)0;                  /* No message received                      */
000a48  e58b0020          STR      r0,[r11,#0x20]
;;;1086   #endif
;;;1087   
;;;1088   #if OS_VERSION >= 204
;;;1089           OSTCBInitHook(ptcb);
000a4c  e1a0000b          MOV      r0,r11
000a50  ebfffffe          BL       OSTCBInitHook
;;;1090   #endif
;;;1091   
;;;1092           OSTaskCreateHook(ptcb); 

⌨️ 快捷键说明

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