os_time.txt

来自「uc/os在lpc2100系列的KEIL模板 uc/os在lpc2100系列的」· 文本 代码 · 共 294 行

TXT
294
字号
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 934] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_time.o --depend=.\rvmdk\os_time.d --device=DARMP --apcs=interwork -O1 -I. -I..\BSP -I..\..\..\..\uCOS-II\Ports\ARM\Generic\RealView -I..\..\..\..\uCOS-II\Source -I..\..\..\..\uC-CPU -I..\..\..\..\uC-CPU\ARM\RealView -I..\..\..\..\uC-LIB -I..\..\..\..\uC-TCPIP\IF -I..\..\..\..\uC-TCPIP\IF\Ether -I..\..\..\..\uC-TCPIP\NIC\ETHER\LPC2378 -I..\..\..\..\uC-TCPIP\NIC\ETHER\PHY -I..\..\..\..\uC-TCPIP\NIC\ETHER\PHY\DP83848 -I..\..\..\..\uC-TCPIP\OS\uCOS-II -I..\..\..\..\uC-TCPIP\Source -I..\..\..\..\uC-LCD\Source -I..\..\..\..\uC-Probe\Target\Communication\Generic\Source -I..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Source -I..\..\..\..\uC-Probe\Target\Communication\Generic\TCPIP\Source -I..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -Ie:\Keil_ARM\ARM\INC\Philips -D__IN_CHIP --omf_browse=.\rvmdk\os_time.crf ..\Source\OS_TIME.C]
                          ARM

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

                  OSTimeDly PROC
;;;35     void  OSTimeDly (INT16U ticks)
;;;36     {
000000  e92d4010          PUSH     {r4,lr}
000004  e1a04000          MOV      r4,r0
;;;37     #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;38         OS_CPU_SR  cpu_sr;
;;;39     #endif    
;;;40     
;;;41     
;;;42         if (ticks > 0) {                                                      /* 0 means no delay!         */
000008  e3540000          CMP      r4,#0
00000c  0a000012          BEQ      |L1.92|
;;;43             OS_ENTER_CRITICAL();
000010  ef000002          SVC      #0x2
;;;44             if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {  /* Delay current task        */
000014  e59f0204          LDR      r0,|L1.544|
000018  e59f3204          LDR      r3,|L1.548|
00001c  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
000020  e5d0102f          LDRB     r1,[r0,#0x2f]
000024  e5d0c030          LDRB     r12,[r0,#0x30]
000028  e7d32001          LDRB     r2,[r3,r1]
00002c  e1d2200c          BICS     r2,r2,r12
000030  e7c32001          STRB     r2,[r3,r1]
000034  1a000004          BNE      |L1.76|
;;;45                 OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
000038  e59f11e8          LDR      r1,|L1.552|
00003c  e5d02031          LDRB     r2,[r0,#0x31]
000040  e5d13000          LDRB     r3,[r1,#0]  ; OSRdyGrp
000044  e1c32002          BIC      r2,r3,r2
000048  e5c12000          STRB     r2,[r1,#0]  ; OSRdyGrp
                  |L1.76|
;;;46             }
;;;47             OSTCBCur->OSTCBDly = ticks;                                       /* Load ticks in TCB         */
00004c  e1c042ba          STRH     r4,[r0,#0x2a]
;;;48             OS_EXIT_CRITICAL();
000050  ef000003          SVC      #0x3
;;;49             OS_Sched();                                                       /* Find next task to run!    */
000054  e8bd4010          POP      {r4,lr}
000058  eafffffe          B        OS_Sched
                  |L1.92|
;;;50         }
;;;51     }
00005c  e8bd4010          POP      {r4,lr}
000060  e12fff1e          BX       lr
;;;52     /*$PAGE*/
                          ENDP

                  OSTimeDlyHMSM PROC
;;;79     INT8U  OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli)
;;;80     {
000064  e92d4070          PUSH     {r4-r6,lr}
000068  e1a06000          MOV      r6,r0
00006c  e1a04001          MOV      r4,r1
000070  e1a05002          MOV      r5,r2
;;;81         INT32U ticks;
;;;82         INT16U loops;
;;;83     
;;;84     
;;;85         if (hours > 0 || minutes > 0 || seconds > 0 || milli > 0) {
000074  e1860004          ORR      r0,r6,r4
000078  e1800005          ORR      r0,r0,r5
00007c  e1900003          ORRS     r0,r0,r3
000080  0a000029          BEQ      |L1.300|
;;;86             if (minutes > 59) {
000084  e354003b          CMP      r4,#0x3b
000088  9a000002          BLS      |L1.152|
;;;87                 return (OS_TIME_INVALID_MINUTES);    /* Validate arguments to be within range              */
00008c  e3a00051          MOV      r0,#0x51
                  |L1.144|
000090  e8bd4070          POP      {r4-r6,lr}
;;;88             }
;;;89             if (seconds > 59) {
;;;90                 return (OS_TIME_INVALID_SECONDS);
;;;91             }
;;;92             if (milli > 999) {
;;;93                 return (OS_TIME_INVALID_MILLI);
;;;94             }
;;;95                                                      /* Compute the total number of clock ticks required.. */
;;;96                                                      /* .. (rounded to the nearest tick)                   */
;;;97             ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC
;;;98                   + OS_TICKS_PER_SEC * ((INT32U)milli + 500L / OS_TICKS_PER_SEC) / 1000L;
;;;99             loops = (INT16U)(ticks / 65536L);        /* Compute the integral number of 65536 tick delays   */
;;;100            ticks = ticks % 65536L;                  /* Obtain  the fractional number of ticks             */
;;;101            OSTimeDly((INT16U)ticks);
;;;102            while (loops > 0) {
;;;103                OSTimeDly(32768);
;;;104                OSTimeDly(32768);
;;;105                loops--;
;;;106            }
;;;107            return (OS_NO_ERR);
;;;108        }
;;;109        return (OS_TIME_ZERO_DLY);
;;;110    }
000094  e12fff1e          BX       lr
                  |L1.152|
000098  e355003b          CMP      r5,#0x3b              ;89
00009c  9a000001          BLS      |L1.168|
0000a0  e3a00052          MOV      r0,#0x52              ;90
0000a4  eafffff9          B        |L1.144|
                  |L1.168|
0000a8  e3530ffa          CMP      r3,#0x3e8             ;92
0000ac  3a000001          BCC      |L1.184|
0000b0  e3a00053          MOV      r0,#0x53              ;93
0000b4  eafffff5          B        |L1.144|
                  |L1.184|
0000b8  e2830002          ADD      r0,r3,#2              ;97
0000bc  e3a010c8          MOV      r1,#0xc8              ;97
0000c0  e0000091          MUL      r0,r1,r0              ;97
0000c4  e3a01ffa          MOV      r1,#0x3e8             ;97
0000c8  ebfffffe          BL       __aeabi_uidivmod
0000cc  e3a01ee1          MOV      r1,#0xe10             ;97
0000d0  e0010196          MUL      r1,r6,r1              ;97
0000d4  e0642204          RSB      r2,r4,r4,LSL #4       ;97
0000d8  e0811102          ADD      r1,r1,r2,LSL #2       ;97
0000dc  e0811005          ADD      r1,r1,r5              ;97
0000e0  e3a02019          MOV      r2,#0x19              ;97
0000e4  e0010192          MUL      r1,r2,r1              ;97
0000e8  e0800181          ADD      r0,r0,r1,LSL #3       ;97
0000ec  e1a04820          LSR      r4,r0,#16             ;99
0000f0  e1a00800          LSL      r0,r0,#16             ;100
0000f4  e1a00820          LSR      r0,r0,#16             ;100
0000f8  ebfffffe          BL       OSTimeDly
0000fc  ea000006          B        |L1.284|
                  |L1.256|
000100  e3a00902          MOV      r0,#0x8000            ;103
000104  ebfffffe          BL       OSTimeDly
000108  e3a00902          MOV      r0,#0x8000            ;104
00010c  ebfffffe          BL       OSTimeDly
000110  e2440001          SUB      r0,r4,#1              ;105
000114  e1a04800          LSL      r4,r0,#16             ;105
000118  e1a04824          LSR      r4,r4,#16             ;105
                  |L1.284|
00011c  e3540000          CMP      r4,#0                 ;102
000120  1afffff6          BNE      |L1.256|
000124  e3a00000          MOV      r0,#0                 ;107
000128  eaffffd8          B        |L1.144|
                  |L1.300|
00012c  e3a00054          MOV      r0,#0x54              ;109
000130  eaffffd6          B        |L1.144|
;;;111    #endif
                          ENDP

                  OSTimeDlyResume PROC
;;;138    INT8U  OSTimeDlyResume (INT8U prio)
;;;139    {
000134  e92d4010          PUSH     {r4,lr}
000138  e1a04000          MOV      r4,r0
;;;140    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;141        OS_CPU_SR  cpu_sr;
;;;142    #endif    
;;;143        OS_TCB    *ptcb;
;;;144    
;;;145    
;;;146        if (prio >= OS_LOWEST_PRIO) {
00013c  e354000c          CMP      r4,#0xc
000140  3a000002          BCC      |L1.336|
;;;147            return (OS_PRIO_INVALID);
000144  e3a0002a          MOV      r0,#0x2a
                  |L1.328|
000148  e8bd4010          POP      {r4,lr}
;;;148        }
;;;149        OS_ENTER_CRITICAL();
;;;150        ptcb = (OS_TCB *)OSTCBPrioTbl[prio];                   /* Make sure that task exist                */
;;;151        if (ptcb != (OS_TCB *)0) {
;;;152            if (ptcb->OSTCBDly != 0) {                         /* See if task is delayed                   */
;;;153                ptcb->OSTCBDly  = 0;                           /* Clear the time delay                     */
;;;154                if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) {  /* See if task is ready to run  */
;;;155                    OSRdyGrp               |= ptcb->OSTCBBitY;             /* Make task ready to run       */
;;;156                    OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
;;;157                    OS_EXIT_CRITICAL();
;;;158                    OS_Sched();                                /* See if this is new highest priority      */
;;;159                } else {
;;;160                    OS_EXIT_CRITICAL();                        /* Task may be suspended                    */
;;;161                }
;;;162                return (OS_NO_ERR);
;;;163            } else {
;;;164                OS_EXIT_CRITICAL();
;;;165                return (OS_TIME_NOT_DLY);                      /* Indicate that task was not delayed       */
;;;166            }
;;;167        }
;;;168        OS_EXIT_CRITICAL();
;;;169        return (OS_TASK_NOT_EXIST);                            /* The task does not exist                  */
;;;170    }
00014c  e12fff1e          BX       lr
                  |L1.336|
000150  ef000002          SVC      #0x2                  ;149
000154  e59f00d0          LDR      r0,|L1.556|
000158  e7900104          LDR      r0,[r0,r4,LSL #2]     ;150
00015c  e3500000          CMP      r0,#0                 ;151
000160  0a00001b          BEQ      |L1.468|
000164  e1d012ba          LDRH     r1,[r0,#0x2a]         ;152
000168  e3510000          CMP      r1,#0                 ;152
00016c  0a000015          BEQ      |L1.456|
000170  e3a01000          MOV      r1,#0                 ;153
000174  e1c012ba          STRH     r1,[r0,#0x2a]         ;153
000178  e5d0102c          LDRB     r1,[r0,#0x2c]         ;154
00017c  e3110008          TST      r1,#8                 ;154
000180  1a00000d          BNE      |L1.444|
000184  e59f109c          LDR      r1,|L1.552|
000188  e5d02031          LDRB     r2,[r0,#0x31]         ;155
00018c  e5d13000          LDRB     r3,[r1,#0]            ;155  ; OSRdyGrp
000190  e1822003          ORR      r2,r2,r3              ;155
000194  e5c12000          STRB     r2,[r1,#0]            ;155  ; OSRdyGrp
000198  e5d0102f          LDRB     r1,[r0,#0x2f]         ;156
00019c  e59f2080          LDR      r2,|L1.548|
0001a0  e5d00030          LDRB     r0,[r0,#0x30]         ;156
0001a4  e7d23001          LDRB     r3,[r2,r1]            ;156
0001a8  e1800003          ORR      r0,r0,r3              ;156
0001ac  e7c20001          STRB     r0,[r2,r1]            ;156
0001b0  ef000003          SVC      #0x3                  ;157
0001b4  ebfffffe          BL       OS_Sched
0001b8  ea000000          B        |L1.448|
                  |L1.444|
0001bc  ef000003          SVC      #0x3                  ;160
                  |L1.448|
0001c0  e3a00000          MOV      r0,#0                 ;162
0001c4  eaffffdf          B        |L1.328|
                  |L1.456|
0001c8  ef000003          SVC      #0x3                  ;164
0001cc  e3a00050          MOV      r0,#0x50              ;165
0001d0  eaffffdc          B        |L1.328|
                  |L1.468|
0001d4  ef000003          SVC      #0x3                  ;168
0001d8  e3a0000b          MOV      r0,#0xb               ;169
0001dc  eaffffd9          B        |L1.328|
;;;171    #endif    
                          ENDP

                  OSTimeGet PROC
;;;187    INT32U  OSTimeGet (void)
;;;188    {
0001e0  e92d4010          PUSH     {r4,lr}
;;;189    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;190        OS_CPU_SR  cpu_sr;
;;;191    #endif    
;;;192        INT32U     ticks;
;;;193    
;;;194    
;;;195        OS_ENTER_CRITICAL();
0001e4  ef000002          SVC      #0x2
;;;196        ticks = OSTime;
0001e8  e59f0040          LDR      r0,|L1.560|
0001ec  e5904000          LDR      r4,[r0,#0]  ; OSTime
;;;197        OS_EXIT_CRITICAL();
0001f0  ef000003          SVC      #0x3
;;;198        return (ticks);
0001f4  e1a00004          MOV      r0,r4
0001f8  e8bd4010          POP      {r4,lr}
;;;199    }
0001fc  e12fff1e          BX       lr
;;;200    #endif    
                          ENDP

                  OSTimeSet PROC
;;;215    void  OSTimeSet (INT32U ticks)
;;;216    {
000200  e92d4010          PUSH     {r4,lr}
000204  e1a04000          MOV      r4,r0
;;;217    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;218        OS_CPU_SR  cpu_sr;
;;;219    #endif    
;;;220    
;;;221    
;;;222        OS_ENTER_CRITICAL();
000208  ef000002          SVC      #0x2
;;;223        OSTime = ticks;
00020c  e59f001c          LDR      r0,|L1.560|
000210  e5804000          STR      r4,[r0,#0]  ; OSTime
;;;224        OS_EXIT_CRITICAL();
000214  ef000003          SVC      #0x3
;;;225    }
000218  e8bd4010          POP      {r4,lr}
00021c  e12fff1e          BX       lr
;;;226    #endif    
                          ENDP

                  |L1.544|
000220  00000000          DCD      OSTCBCur
                  |L1.548|
000224  00000000          DCD      OSRdyTbl
                  |L1.552|
000228  00000000          DCD      OSRdyGrp
                  |L1.556|
00022c  00000000          DCD      OSTCBPrioTbl
                  |L1.560|
000230  00000000          DCD      OSTime

⌨️ 快捷键说明

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