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

📄 os_core.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
00019c  e59f2978          LDR      r2,|L1.2844|
;;;624        pevent2 = &OSEventTbl[1];
0001a0  e282100c          ADD      r1,r2,#0xc
;;;625        for (i = 0; i < (OS_MAX_EVENTS - 1); i++) {                  /* Init. list of free EVENT control blocks  */
0001a4  e3a00000          MOV      r0,#0
0001a8  ea000006          B        |L1.456|
;;;626            pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
                  |L1.428|
0001ac  e3a03000          MOV      r3,#0
0001b0  e5c23000          STRB     r3,[r2,#0]
;;;627            pevent1->OSEventPtr  = pevent2;
0001b4  e5821004          STR      r1,[r2,#4]
;;;628            pevent1++;
0001b8  e282200c          ADD      r2,r2,#0xc
;;;629            pevent2++;
0001bc  e281100c          ADD      r1,r1,#0xc
0001c0  e2803001          ADD      r3,r0,#1              ;625
0001c4  e3c30801          BIC      r0,r3,#0x10000        ;625
                  |L1.456|
0001c8  e3500001          CMP      r0,#1                 ;625
0001cc  bafffff6          BLT      |L1.428|              ;625
;;;630        }
;;;631        pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
0001d0  e3a03000          MOV      r3,#0
0001d4  e5c23000          STRB     r3,[r2,#0]
;;;632        pevent1->OSEventPtr  = (OS_EVENT *)0;
0001d8  e5823004          STR      r3,[r2,#4]
;;;633        OSEventFreeList      = &OSEventTbl[0];
0001dc  e59f3938          LDR      r3,|L1.2844|
0001e0  e59fc938          LDR      r12,|L1.2848|
0001e4  e58c3000          STR      r3,[r12,#0]  ; OSEventFreeList
;;;634    #else
;;;635        OSEventFreeList              = &OSEventTbl[0];               /* Only have ONE event control block        */
;;;636        OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
;;;637        OSEventFreeList->OSEventPtr  = (OS_EVENT *)0;
;;;638    #endif
;;;639    #endif
;;;640    }
0001e8  e12fff1e          BX       lr
                          ENDP

                  OS_InitTCBList PROC
;;;836    
;;;837        OSTCBList     = (OS_TCB *)0;                                 /* TCB Initialization                       */
0001ec  e3a03000          MOV      r3,#0
0001f0  e59fc92c          LDR      r12,|L1.2852|
0001f4  e58c3000          STR      r3,[r12,#0]  ; OSTCBList
;;;838        for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) {                 /* Clear the priority table                 */
0001f8  e3a00000          MOV      r0,#0
0001fc  ea000004          B        |L1.532|
;;;839            OSTCBPrioTbl[i] = (OS_TCB *)0;
                  |L1.512|
000200  e3a03000          MOV      r3,#0
000204  e59fc91c          LDR      r12,|L1.2856|
000208  e78c3100          STR      r3,[r12,r0,LSL #2]
00020c  e2803001          ADD      r3,r0,#1              ;838
000210  e20300ff          AND      r0,r3,#0xff           ;838
                  |L1.532|
000214  e350000d          CMP      r0,#0xd               ;838
000218  bafffff8          BLT      |L1.512|              ;838
;;;840        }
;;;841        ptcb1 = &OSTCBTbl[0];
00021c  e59f2908          LDR      r2,|L1.2860|
;;;842        ptcb2 = &OSTCBTbl[1];
000220  e2821034          ADD      r1,r2,#0x34
;;;843        for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) {  /* Init. list of free TCBs                  */
000224  e3a00000          MOV      r0,#0
000228  ea000004          B        |L1.576|
;;;844            ptcb1->OSTCBNext = ptcb2;
                  |L1.556|
00022c  e5821014          STR      r1,[r2,#0x14]
;;;845            ptcb1++;
000230  e2822034          ADD      r2,r2,#0x34
;;;846            ptcb2++;
000234  e2811034          ADD      r1,r1,#0x34
000238  e2803001          ADD      r3,r0,#1              ;843
00023c  e20300ff          AND      r0,r3,#0xff           ;843
                  |L1.576|
000240  e350000c          CMP      r0,#0xc               ;843
000244  bafffff8          BLT      |L1.556|              ;843
;;;847        }
;;;848        ptcb1->OSTCBNext = (OS_TCB *)0;                              /* Last OS_TCB                              */
000248  e3a03000          MOV      r3,#0
00024c  e5823014          STR      r3,[r2,#0x14]
;;;849        OSTCBFreeList    = &OSTCBTbl[0];
000250  e59f38d4          LDR      r3,|L1.2860|
000254  e59fc8d4          LDR      r12,|L1.2864|
000258  e58c3000          STR      r3,[r12,#0]  ; OSTCBFreeList
;;;850    }
00025c  e12fff1e          BX       lr
                          ENDP

                  OS_InitRdyList PROC
;;;696    
;;;697        OSRdyGrp      = 0x00;                                        /* Clear the ready list                     */
000260  e3a02000          MOV      r2,#0
000264  e59f38c8          LDR      r3,|L1.2868|
000268  e5c32000          STRB     r2,[r3,#0]  ; OSRdyGrp
;;;698        prdytbl       = &OSRdyTbl[0];
00026c  e59f08c4          LDR      r0,|L1.2872|
;;;699        for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
000270  e3a01000          MOV      r1,#0
000274  ea000003          B        |L1.648|
;;;700            *prdytbl++ = 0x00;
                  |L1.632|
000278  e3a02000          MOV      r2,#0
00027c  e4c02001          STRB     r2,[r0],#1
000280  e2812001          ADD      r2,r1,#1              ;699
000284  e3c21801          BIC      r1,r2,#0x10000        ;699
                  |L1.648|
000288  e3510002          CMP      r1,#2                 ;699
00028c  bafffff9          BLT      |L1.632|              ;699
;;;701        }
;;;702    
;;;703        OSPrioCur     = 0;
000290  e3a02000          MOV      r2,#0
000294  e59f38a0          LDR      r3,|L1.2876|
000298  e5c32000          STRB     r2,[r3,#0]  ; OSPrioCur
;;;704        OSPrioHighRdy = 0;
00029c  e59f389c          LDR      r3,|L1.2880|
0002a0  e5c32000          STRB     r2,[r3,#0]  ; OSPrioHighRdy
;;;705    
;;;706        OSTCBHighRdy  = (OS_TCB *)0;                                 
0002a4  e59f3898          LDR      r3,|L1.2884|
0002a8  e5832000          STR      r2,[r3,#0]  ; OSTCBHighRdy
;;;707        OSTCBCur      = (OS_TCB *)0;
0002ac  e59f3894          LDR      r3,|L1.2888|
0002b0  e5832000          STR      r2,[r3,#0]  ; OSTCBCur
;;;708    }
0002b4  e12fff1e          BX       lr
                          ENDP

                  OS_InitMisc PROC
;;;657    #if OS_TIME_GET_SET_EN > 0   
;;;658        OSTime        = 0L;                                          /* Clear the 32-bit system clock            */
0002b8  e3a00000          MOV      r0,#0
0002bc  e59f1888          LDR      r1,|L1.2892|
0002c0  e5810000          STR      r0,[r1,#0]  ; OSTime
;;;659    #endif
;;;660    
;;;661        OSIntNesting  = 0;                                           /* Clear the interrupt nesting counter      */
0002c4  e59f1884          LDR      r1,|L1.2896|
0002c8  e5c10000          STRB     r0,[r1,#0]  ; OSIntNesting
;;;662        OSLockNesting = 0;                                           /* Clear the scheduling lock counter        */
0002cc  e59f1880          LDR      r1,|L1.2900|
0002d0  e5c10000          STRB     r0,[r1,#0]  ; OSLockNesting
;;;663    
;;;664        OSTaskCtr     = 0;                                           /* Clear the number of tasks                */
0002d4  e59f187c          LDR      r1,|L1.2904|
0002d8  e5c10000          STRB     r0,[r1,#0]  ; OSTaskCtr
;;;665    
;;;666        OSRunning     = FALSE;                                       /* Indicate that multitasking not started   */
0002dc  e59f1878          LDR      r1,|L1.2908|
0002e0  e5c10000          STRB     r0,[r1,#0]  ; OSRunning
;;;667        
;;;668        OSCtxSwCtr    = 0;                                           /* Clear the context switch counter         */
0002e4  e59f1874          LDR      r1,|L1.2912|
0002e8  e5810000          STR      r0,[r1,#0]  ; OSCtxSwCtr
;;;669        OSIdleCtr     = 0L;                                          /* Clear the 32-bit idle counter            */
0002ec  e59f1808          LDR      r1,|L1.2812|
0002f0  e5810000          STR      r0,[r1,#0]  ; OSIdleCtr
;;;670    
;;;671    #if (OS_TASK_STAT_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
;;;672        OSIdleCtrRun  = 0L;
0002f4  e59f1804          LDR      r1,|L1.2816|
0002f8  e5810000          STR      r0,[r1,#0]  ; OSIdleCtrRun
;;;673        OSIdleCtrMax  = 0L;
0002fc  e59f17f4          LDR      r1,|L1.2808|
000300  e5810000          STR      r0,[r1,#0]  ; OSIdleCtrMax
;;;674        OSStatRdy     = FALSE;                                       /* Statistic task is not ready              */
000304  e59f17e8          LDR      r1,|L1.2804|
000308  e5c10000          STRB     r0,[r1,#0]  ; OSStatRdy
;;;675    #endif
;;;676    }
00030c  e12fff1e          BX       lr
                          ENDP

                  OSInit PROC
;;;85     void  OSInit (void)
;;;86     {
000310  e92d4010          PUSH     {r4,lr}
;;;87     #if OS_VERSION >= 204
;;;88         OSInitHookBegin();                                           /* Call port specific initialization code   */
000314  ebfffffe          BL       OSInitHookBegin
;;;89     #endif
;;;90     
;;;91         OS_InitMisc();                                               /* Initialize miscellaneous variables       */
000318  ebfffffe          BL       OS_InitMisc
;;;92     
;;;93         OS_InitRdyList();                                            /* Initialize the Ready List                */
00031c  ebfffffe          BL       OS_InitRdyList
;;;94         OS_InitTCBList();                                            /* Initialize the free list of OS_TCBs      */
000320  ebfffffe          BL       OS_InitTCBList
;;;95         OS_InitEventList();                                          /* Initialize the free list of OS_EVENTs    */
000324  ebfffffe          BL       OS_InitEventList
;;;96     
;;;97     #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
;;;98         OS_FlagInit();                                               /* Initialize the event flag structures     */
000328  ebfffffe          BL       OS_FlagInit
;;;99     #endif
;;;100    
;;;101    #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
;;;102        OS_MemInit();                                                /* Initialize the memory manager            */
00032c  ebfffffe          BL       OS_MemInit
;;;103    #endif
;;;104    
;;;105    #if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
;;;106        OS_QInit();                                                  /* Initialize the message queue structures  */
000330  ebfffffe          BL       OS_QInit
;;;107    #endif
;;;108    
;;;109        OS_InitTaskIdle();                                           /* Create the Idle Task                     */
000334  ebfffffe          BL       OS_InitTaskIdle
;;;110    #if OS_TASK_STAT_EN > 0
;;;111        OS_InitTaskStat();                                           /* Create the Statistic Task                */
000338  ebfffffe          BL       OS_InitTaskStat
;;;112    #endif
;;;113    
;;;114    #if OS_VERSION >= 204
;;;115        OSInitHookEnd();                                             /* Call port specific init. code            */
00033c  ebfffffe          BL       OSInitHookEnd
;;;116    #endif
;;;117    }
000340  e8bd4010          POP      {r4,lr}
000344  e12fff1e          BX       lr
                          ENDP

                  OSIntEnter PROC
;;;145    {
;;;146        if (OSRunning == TRUE) {
000348  e59f080c          LDR      r0,|L1.2908|
00034c  e5d00000          LDRB     r0,[r0,#0]  ; OSRunning
000350  e3500001          CMP      r0,#1
000354  1a000008          BNE      |L1.892|
;;;147            if (OSIntNesting < 255) {
000358  e59f07f0          LDR      r0,|L1.2896|
00035c  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000360  e35000ff          CMP      r0,#0xff
000364  aa000004          BGE      |L1.892|
;;;148                OSIntNesting++;                      /* Increment ISR nesting level                        */
000368  e59f07e0          LDR      r0,|L1.2896|
00036c  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000370  e2800001          ADD      r0,r0,#1
000374  e59f17d4          LDR      r1,|L1.2896|
000378  e5c10000          STRB     r0,[r1,#0]  ; OSIntNesting
;;;149            }
;;;150        }
;;;151    }
                  |L1.892|
00037c  e12fff1e          BX       lr
                          ENDP

                  OSIntExit PROC
;;;172    void  OSIntExit (void)
;;;173    {
000380  e92d4010          PUSH     {r4,lr}
;;;174    #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;;;175        OS_CPU_SR  cpu_sr;
;;;176    #endif
;;;177        
;;;178        

⌨️ 快捷键说明

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