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

📄 os_cpu_c.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 903] for uVision
; commandline ArmCC [--debug -c --asm --interleave -oos_cpu_c.o --depend=os_cpu_c.d --device=DARMP --apcs=interwork -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\ARM\Generic\RVMDK -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\ARM\RVMDK -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uCOSView\Source -I..\..\..\..\..\uCOSView\Ports\ARM7\LPC2468\IAR -Id:\Keil\ARM\INC\Philips ..\..\..\..\..\uCOS-II\Ports\ARM\Generic\RVMDK\os_cpu_c.c]
                          ARM

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  OSInitHookBegin PROC
;;;133    #if OS_TMR_EN > 0
;;;134        OSTmrCtr = 0;
000000  e3a00000          MOV      r0,#0
000004  e59f1228          LDR      r1,|L1.564|
000008  e1c100b0          STRH     r0,[r1,#0]  ; OSTmrCtr
;;;135    #endif
;;;136    }
00000c  e12fff1e          BX       lr
                          ENDP

                  OSInitHookEnd PROC
;;;160    #endif
;;;161    }
000010  e12fff1e          BX       lr
                          ENDP

                  OSTaskCreateHook PROC
;;;176    void  OSTaskCreateHook (OS_TCB *ptcb)
;;;177    {
000014  e92d4010          PUSH     {r4,lr}
000018  e1a04000          MOV      r4,r0
;;;178    #if OS_CPU_FPU_EN > 0
;;;179        INT8U  err;
;;;180        void  *pblk;
;;;181    #endif
;;;182    
;;;183    
;;;184    #if OS_CPU_FPU_EN > 0
;;;185        if (ptcb->OSTCBOpt & OS_TASK_OPT_SAVE_FP) {                         /* See if task needs FP support                             */
;;;186            pblk = OSMemGet(OSFPPartPtr, &err);                             /* Yes, Get storage for VFP registers                       */
;;;187            if (pblk != (void *)0) {                                        /*      Did we get a memory block?                          */
;;;188                ptcb->OSTCBExtPtr = pblk;                                   /*      Yes, Link to task's TCB                             */
;;;189                OS_CPU_FP_Save(pblk);                                       /*           Save the VFP registers in block                */
;;;190            }
;;;191        }
;;;192    #endif
;;;193    
;;;194    #if OS_VIEW_MODULE > 0
;;;195        OSView_TaskCreateHook(ptcb);
00001c  e1a00004          MOV      r0,r4
000020  ebfffffe          BL       OSView_TaskCreateHook
;;;196    #else
;;;197        (void)ptcb;                                                         /* Prevent compiler warning                                 */
;;;198    #endif
;;;199    }
000024  e8bd4010          POP      {r4,lr}
000028  e12fff1e          BX       lr
                          ENDP

                  OSTaskDelHook PROC
;;;225        (void)ptcb;                                                         /* Prevent compiler warning                                 */
;;;226    }
00002c  e12fff1e          BX       lr
                          ENDP

                  OSTaskIdleHook PROC
;;;246    #endif
;;;247    }
000030  e12fff1e          BX       lr
                          ENDP

                  OSTaskStatHook PROC
;;;263    {
;;;264    }
000034  e12fff1e          BX       lr
                          ENDP

                  OSTaskStkInit PROC
;;;296    OS_STK *OSTaskStkInit (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT16U opt)
;;;297    {
000038  e92d4030          PUSH     {r4,r5,lr}
00003c  e1a0c000          MOV      r12,r0
;;;298        OS_STK *stk;
;;;299        INT32U  task_addr;
;;;300    
;;;301    
;;;302        opt       = opt;                                                    /* 'opt' is not used, prevent warning                       */
000040  e1a00000          MOV      r0,r0
;;;303        stk       = ptos;                                                   /* Load stack pointer                                       */
000044  e1a00002          MOV      r0,r2
;;;304        task_addr = (INT32U)task & ~1;                                      /* Mask off lower bit in case task is thumb mode            */
000048  e3cce001          BIC      lr,r12,#1
;;;305        *(stk)    = (INT32U)task_addr;                                      /* Entry Point                                              */
00004c  e580e000          STR      lr,[r0,#0]
;;;306        *(--stk)  = (INT32U)0x14141414L;                                    /* R14 (LR)                                                 */
000050  e59f41e0          LDR      r4,|L1.568|
000054  e2405004          SUB      r5,r0,#4
000058  e1a00005          MOV      r0,r5
00005c  e5854000          STR      r4,[r5,#0]
;;;307        *(--stk)  = (INT32U)0x12121212L;                                    /* R12                                                      */
000060  e59f41d4          LDR      r4,|L1.572|
000064  e2405004          SUB      r5,r0,#4
000068  e1a00005          MOV      r0,r5
00006c  e5854000          STR      r4,[r5,#0]
;;;308        *(--stk)  = (INT32U)0x11111111L;                                    /* R11                                                      */
000070  e59f41c8          LDR      r4,|L1.576|
000074  e2405004          SUB      r5,r0,#4
000078  e1a00005          MOV      r0,r5
00007c  e5854000          STR      r4,[r5,#0]
;;;309        *(--stk)  = (INT32U)0x10101010L;                                    /* R10                                                      */
000080  e59f41bc          LDR      r4,|L1.580|
000084  e2405004          SUB      r5,r0,#4
000088  e1a00005          MOV      r0,r5
00008c  e5854000          STR      r4,[r5,#0]
;;;310        *(--stk)  = (INT32U)0x09090909L;                                    /* R9                                                       */
000090  e59f41b0          LDR      r4,|L1.584|
000094  e2405004          SUB      r5,r0,#4
000098  e1a00005          MOV      r0,r5
00009c  e5854000          STR      r4,[r5,#0]
;;;311        *(--stk)  = (INT32U)0x08080808L;                                    /* R8                                                       */
0000a0  e1c441c4          BIC      r4,r4,r4,ASR #3
0000a4  e2405004          SUB      r5,r0,#4
0000a8  e1a00005          MOV      r0,r5
0000ac  e5854000          STR      r4,[r5,#0]
;;;312        *(--stk)  = (INT32U)0x07070707L;                                    /* R7                                                       */
0000b0  e04441c4          SUB      r4,r4,r4,ASR #3
0000b4  e2405004          SUB      r5,r0,#4
0000b8  e1a00005          MOV      r0,r5
0000bc  e5854000          STR      r4,[r5,#0]
;;;313        *(--stk)  = (INT32U)0x06060606L;                                    /* R6                                                       */
0000c0  e1c44144          BIC      r4,r4,r4,ASR #2
0000c4  e2405004          SUB      r5,r0,#4
0000c8  e1a00005          MOV      r0,r5
0000cc  e5854000          STR      r4,[r5,#0]
;;;314        *(--stk)  = (INT32U)0x05050505L;                                    /* R5                                                       */
0000d0  e02440c4          EOR      r4,r4,r4,ASR #1
0000d4  e2405004          SUB      r5,r0,#4
0000d8  e1a00005          MOV      r0,r5
0000dc  e5854000          STR      r4,[r5,#0]
;;;315        *(--stk)  = (INT32U)0x04040404L;                                    /* R4                                                       */
0000e0  e1c44144          BIC      r4,r4,r4,ASR #2
0000e4  e2405004          SUB      r5,r0,#4
0000e8  e1a00005          MOV      r0,r5
0000ec  e5854000          STR      r4,[r5,#0]
;;;316        *(--stk)  = (INT32U)0x03030303L;                                    /* R3                                                       */
0000f0  e0444144          SUB      r4,r4,r4,ASR #2
0000f4  e2405004          SUB      r5,r0,#4
0000f8  e1a00005          MOV      r0,r5
0000fc  e5854000          STR      r4,[r5,#0]
;;;317        *(--stk)  = (INT32U)0x02020202L;                                    /* R2                                                       */
000100  e1c440c4          BIC      r4,r4,r4,ASR #1
000104  e2405004          SUB      r5,r0,#4
000108  e1a00005          MOV      r0,r5
00010c  e5854000          STR      r4,[r5,#0]
;;;318        *(--stk)  = (INT32U)0x01010101L;                                    /* R1                                                       */
000110  e1a040c4          ASR      r4,r4,#1
000114  e2405004          SUB      r5,r0,#4
000118  e1a00005          MOV      r0,r5
00011c  e5854000          STR      r4,[r5,#0]
;;;319        *(--stk)  = (INT32U)p_arg;                                          /* R0 : argument                                            */
000120  e2404004          SUB      r4,r0,#4
000124  e1a00004          MOV      r0,r4
000128  e5841000          STR      r1,[r4,#0]
;;;320        if ((INT32U)task & 0x01) {                                          /* See if task runs in Thumb or ARM mode                    */
00012c  e31c0001          TST      r12,#1
000130  0a000004          BEQ      |L1.328|
;;;321            *(--stk) = (INT32U)ARM_SVC_MODE_THUMB;                          /* CPSR  (Enable both IRQ and FIQ interrupts, THUMB-mode)   */
000134  e3a04033          MOV      r4,#0x33
000138  e2405004          SUB      r5,r0,#4
00013c  e1a00005          MOV      r0,r5
000140  e5854000          STR      r4,[r5,#0]
000144  ea000003          B        |L1.344|
                  |L1.328|
;;;322        } else {
;;;323            *(--stk) = (INT32U)ARM_SVC_MODE_ARM;                            /* CPSR  (Enable both IRQ and FIQ interrupts, ARM-mode)     */
000148  e3a04013          MOV      r4,#0x13
00014c  e2405004          SUB      r5,r0,#4
000150  e1a00005          MOV      r0,r5
000154  e5854000          STR      r4,[r5,#0]
                  |L1.344|
;;;324        }

⌨️ 快捷键说明

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