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

📄 os_time.txt

📁 ucos2 is a file system for embedded applications which can be used on any media, for which you can p
💻 TXT
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 919] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_time.o --depend=.\rvmdk\os_time.d --device=DARMP --apcs=interwork -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\ARM\Generic\RealView -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\uCOSView\Source -I..\..\..\..\..\uCOSView\Ports\ARM7\LPC2000\IAR -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\ARM\RealView -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -IC:\Keil\ARM\INC\Philips --omf_browse=.\rvmdk\os_time.crf ..\..\..\..\..\uCOS-II\Source\os_time.c]
                          ARM

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

                  OSTimeDly PROC
;;;44     void  OSTimeDly (INT16U ticks)
;;;45     {
000000  e92d4010          PUSH     {r4,lr}
000004  e1a04000          MOV      r4,r0
;;;46         INT8U      y;
;;;47     #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;48         OS_CPU_SR  cpu_sr = 0;
;;;49     #endif
;;;50     
;;;51     
;;;52     
;;;53         if (OSIntNesting > 0) {                      /* See if trying to call from an ISR                  */
000008  e59f0208          LDR      r0,|L1.536|
00000c  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000010  e3500000          CMP      r0,#0
000014  1a000015          BNE      |L1.112|
;;;54             return;
;;;55         }
;;;56         if (ticks > 0) {                             /* 0 means no delay!                                  */
000018  e3540000          CMP      r4,#0
00001c  0a000013          BEQ      |L1.112|
;;;57             OS_ENTER_CRITICAL();
000020  ebfffffe          BL       OS_CPU_SR_Save
;;;58             y            =  OSTCBCur->OSTCBY;        /* Delay current task                                 */
000024  e59f11f0          LDR      r1,|L1.540|
;;;59             OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX;
000028  e59f31f0          LDR      r3,|L1.544|
00002c  e5912000          LDR      r2,[r1,#0]            ;58  ; OSTCBCur
000030  e5d21030          LDRB     r1,[r2,#0x30]         ;58
000034  e5d2e031          LDRB     lr,[r2,#0x31]
000038  e7d3c001          LDRB     r12,[r3,r1]
00003c  e1ccc00e          BIC      r12,r12,lr
000040  e7c3c001          STRB     r12,[r3,r1]
;;;60             if (OSRdyTbl[y] == 0) {
000044  e7d31001          LDRB     r1,[r3,r1]
000048  e3510000          CMP      r1,#0
;;;61                 OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
00004c  059f11d0          LDREQ    r1,|L1.548|
000050  05d23032          LDRBEQ   r3,[r2,#0x32]
000054  05d1c000          LDRBEQ   r12,[r1,#0]  ; OSRdyGrp
000058  01cc3003          BICEQ    r3,r12,r3
00005c  05c13000          STRBEQ   r3,[r1,#0]  ; OSRdyGrp
;;;62             }
;;;63             OSTCBCur->OSTCBDly = ticks;              /* Load ticks in TCB                                  */
000060  e1c242ba          STRH     r4,[r2,#0x2a]
;;;64             OS_EXIT_CRITICAL();
000064  ebfffffe          BL       OS_CPU_SR_Restore
;;;65             OS_Sched();                              /* Find next task to run!                             */
000068  e8bd4010          POP      {r4,lr}
00006c  eafffffe          B        OS_Sched
                  |L1.112|
;;;66         }
;;;67     }
000070  e8bd4010          POP      {r4,lr}
000074  e12fff1e          BX       lr
;;;68     /*$PAGE*/
                          ENDP

                  OSTimeDlyHMSM PROC
;;;96     INT8U  OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U ms)
;;;97     {
000078  e92d4070          PUSH     {r4-r6,lr}
00007c  e1a04000          MOV      r4,r0
;;;98         INT32U ticks;
;;;99         INT16U loops;
;;;100    
;;;101    
;;;102        if (OSIntNesting > 0) {                      /* See if trying to call from an ISR                  */
000080  e59f0190          LDR      r0,|L1.536|
000084  e1a06001          MOV      r6,r1                 ;97
000088  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
00008c  e1a05002          MOV      r5,r2                 ;97
000090  e3500000          CMP      r0,#0
;;;103            return (OS_ERR_TIME_DLY_ISR);
000094  13a00055          MOVNE    r0,#0x55
000098  1a00001b          BNE      |L1.268|
;;;104        }
;;;105    #if OS_ARG_CHK_EN > 0
;;;106        if (hours == 0) {
;;;107            if (minutes == 0) {
;;;108                if (seconds == 0) {
;;;109                    if (ms == 0) {
;;;110                        return (OS_ERR_TIME_ZERO_DLY);
;;;111                    }
;;;112                }
;;;113            }
;;;114        }
;;;115        if (minutes > 59) {
;;;116            return (OS_ERR_TIME_INVALID_MINUTES);    /* Validate arguments to be within range              */
;;;117        }
;;;118        if (seconds > 59) {
;;;119            return (OS_ERR_TIME_INVALID_SECONDS);
;;;120        }
;;;121        if (ms > 999) {
;;;122            return (OS_ERR_TIME_INVALID_MS);
;;;123        }
;;;124    #endif
;;;125                                                     /* Compute the total number of clock ticks required.. */
;;;126                                                     /* .. (rounded to the nearest tick)                   */
;;;127        ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC
00009c  e2830005          ADD      r0,r3,#5
0000a0  e3a01064          MOV      r1,#0x64
0000a4  e0000091          MUL      r0,r1,r0
0000a8  e3a01ffa          MOV      r1,#0x3e8
0000ac  ebfffffe          BL       __aeabi_uidivmod
0000b0  e3a01ee1          MOV      r1,#0xe10
0000b4  e0010194          MUL      r1,r4,r1
0000b8  e0662206          RSB      r2,r6,r6,LSL #4
0000bc  e0811102          ADD      r1,r1,r2,LSL #2
0000c0  e0811005          ADD      r1,r1,r5
0000c4  e3a02019          MOV      r2,#0x19
0000c8  e0010192          MUL      r1,r2,r1
0000cc  e0800101          ADD      r0,r0,r1,LSL #2
;;;128              + OS_TICKS_PER_SEC * ((INT32U)ms + 500L / OS_TICKS_PER_SEC) / 1000L;
;;;129        loops = (INT16U)(ticks >> 16);               /* Compute the integral number of 65536 tick delays   */
0000d0  e1a04820          LSR      r4,r0,#16
;;;130        ticks = ticks & 0xFFFFL;                     /* Obtain  the fractional number of ticks             */
0000d4  e1a00800          LSL      r0,r0,#16
0000d8  e1a00820          LSR      r0,r0,#16
;;;131        OSTimeDly((INT16U)ticks);
0000dc  ebfffffe          BL       OSTimeDly
;;;132        while (loops > 0) {
0000e0  ea000006          B        |L1.256|
                  |L1.228|
;;;133            OSTimeDly((INT16U)32768u);
0000e4  e3a00902          MOV      r0,#0x8000
0000e8  ebfffffe          BL       OSTimeDly
;;;134            OSTimeDly((INT16U)32768u);
0000ec  e3a00902          MOV      r0,#0x8000
0000f0  ebfffffe          BL       OSTimeDly
;;;135            loops--;
0000f4  e2440001          SUB      r0,r4,#1
0000f8  e1a04800          LSL      r4,r0,#16
0000fc  e1a04824          LSR      r4,r4,#16
                  |L1.256|
000100  e3540000          CMP      r4,#0                 ;132
000104  1afffff6          BNE      |L1.228|
;;;136        }
;;;137        return (OS_ERR_NONE);
000108  e3a00000          MOV      r0,#0
                  |L1.268|
00010c  e8bd4070          POP      {r4-r6,lr}
;;;138    }
000110  e12fff1e          BX       lr
;;;139    #endif
                          ENDP

                  OSTimeDlyResume PROC
;;;167    INT8U  OSTimeDlyResume (INT8U prio)
;;;168    {
000114  e92d4010          PUSH     {r4,lr}
;;;169        OS_TCB    *ptcb;
;;;170    #if OS_CRITICAL_METHOD == 3                                    /* Storage for CPU status register      */
;;;171        OS_CPU_SR  cpu_sr = 0;
;;;172    #endif
;;;173    
;;;174    
;;;175    
;;;176        if (prio >= OS_LOWEST_PRIO) {
000118  e350001f          CMP      r0,#0x1f
00011c  e1a04000          MOV      r4,r0                 ;168
;;;177            return (OS_ERR_PRIO_INVALID);
000120  23a0002a          MOVCS    r0,#0x2a
000124  2a000007          BCS      |L1.328|
;;;178        }
;;;179        OS_ENTER_CRITICAL();
000128  ebfffffe          BL       OS_CPU_SR_Save
;;;180        ptcb = OSTCBPrioTbl[prio];                                 /* Make sure that task exist            */
00012c  e59f10f4          LDR      r1,|L1.552|
000130  e7911104          LDR      r1,[r1,r4,LSL #2]
;;;181        if (ptcb == (OS_TCB *)0) {
000134  e3510000          CMP      r1,#0
;;;182            OS_EXIT_CRITICAL();
;;;183            return (OS_ERR_TASK_NOT_EXIST);                        /* The task does not exist              */
;;;184        }
;;;185        if (ptcb == OS_TCB_RESERVED) {
000138  13510001          CMPNE    r1,#1
00013c  1a000003          BNE      |L1.336|
;;;186            OS_EXIT_CRITICAL();
000140  ebfffffe          BL       OS_CPU_SR_Restore
;;;187            return (OS_ERR_TASK_NOT_EXIST);                        /* The task does not exist              */
000144  e3a00043          MOV      r0,#0x43
                  |L1.328|
000148  e8bd4010          POP      {r4,lr}
;;;188        }
;;;189        if (ptcb->OSTCBDly == 0) {                                 /* See if task is delayed               */
;;;190            OS_EXIT_CRITICAL();
;;;191            return (OS_ERR_TIME_NOT_DLY);                          /* Indicate that task was not delayed   */
;;;192        }
;;;193    
;;;194        ptcb->OSTCBDly = 0;                                        /* Clear the time delay                 */
;;;195        if ((ptcb->OSTCBStat & OS_STAT_PEND_ANY) != OS_STAT_RDY) {
;;;196            ptcb->OSTCBStat     &= ~OS_STAT_PEND_ANY;              /* Yes, Clear status flag               */
;;;197            ptcb->OSTCBStatPend  =  OS_STAT_PEND_TO;               /* Indicate PEND timeout                */
;;;198        } else {
;;;199            ptcb->OSTCBStatPend  =  OS_STAT_PEND_OK;
;;;200        }
;;;201        if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) {  /* Is task suspended?                   */
;;;202            OSRdyGrp               |= ptcb->OSTCBBitY;             /* No,  Make ready                      */
;;;203            OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
;;;204            OS_EXIT_CRITICAL();
;;;205            OS_Sched();                                            /* See if this is new highest priority  */
;;;206        } else {
;;;207            OS_EXIT_CRITICAL();                                    /* Task may be suspended                */
;;;208        }
;;;209        return (OS_ERR_NONE);
;;;210    }
00014c  e12fff1e          BX       lr
                  |L1.336|
000150  e1d122ba          LDRH     r2,[r1,#0x2a]         ;189
000154  e3520000          CMP      r2,#0                 ;189
000158  1a000002          BNE      |L1.360|
00015c  ebfffffe          BL       OS_CPU_SR_Restore
000160  e3a00050          MOV      r0,#0x50              ;191
000164  eafffff7          B        |L1.328|
                  |L1.360|
000168  e3a03000          MOV      r3,#0                 ;194
00016c  e1c132ba          STRH     r3,[r1,#0x2a]         ;194
000170  e5d1202c          LDRB     r2,[r1,#0x2c]         ;195
000174  e3120037          TST      r2,#0x37              ;195
000178  13c22037          BICNE    r2,r2,#0x37           ;196
00017c  05c1302d          STRBEQ   r3,[r1,#0x2d]         ;199
000180  15c1202c          STRBNE   r2,[r1,#0x2c]         ;196
000184  13a02001          MOVNE    r2,#1                 ;197
000188  15c1202d          STRBNE   r2,[r1,#0x2d]         ;197
00018c  e5d1202c          LDRB     r2,[r1,#0x2c]         ;201
000190  e3120008          TST      r2,#8                 ;201
000194  1a00000d          BNE      |L1.464|
000198  e59f2084          LDR      r2,|L1.548|
00019c  e5d13032          LDRB     r3,[r1,#0x32]         ;202
0001a0  e5d2c000          LDRB     r12,[r2,#0]           ;202  ; OSRdyGrp
0001a4  e183300c          ORR      r3,r3,r12             ;202
0001a8  e5c23000          STRB     r3,[r2,#0]            ;202  ; OSRdyGrp
0001ac  e5d12030          LDRB     r2,[r1,#0x30]         ;203
0001b0  e59f3068          LDR      r3,|L1.544|
0001b4  e5d11031          LDRB     r1,[r1,#0x31]         ;203
0001b8  e7d3c002          LDRB     r12,[r3,r2]           ;203
0001bc  e181100c          ORR      r1,r1,r12             ;203
0001c0  e7c31002          STRB     r1,[r3,r2]            ;203
0001c4  ebfffffe          BL       OS_CPU_SR_Restore
0001c8  ebfffffe          BL       OS_Sched
0001cc  ea000000          B        |L1.468|
                  |L1.464|
0001d0  ebfffffe          BL       OS_CPU_SR_Restore
                  |L1.468|
0001d4  e3a00000          MOV      r0,#0                 ;209
0001d8  eaffffda          B        |L1.328|
;;;211    #endif
                          ENDP

                  OSTimeGet PROC
;;;227    INT32U  OSTimeGet (void)
;;;228    {
0001dc  e92d4010          PUSH     {r4,lr}
;;;229        INT32U     ticks;
;;;230    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;231        OS_CPU_SR  cpu_sr = 0;
;;;232    #endif
;;;233    
;;;234    
;;;235    
;;;236        OS_ENTER_CRITICAL();
0001e0  ebfffffe          BL       OS_CPU_SR_Save
;;;237        ticks = OSTime;
0001e4  e59f1040          LDR      r1,|L1.556|
0001e8  e5914000          LDR      r4,[r1,#0]  ; OSTime
;;;238        OS_EXIT_CRITICAL();
0001ec  ebfffffe          BL       OS_CPU_SR_Restore
;;;239        return (ticks);
0001f0  e1a00004          MOV      r0,r4
0001f4  e8bd4010          POP      {r4,lr}
;;;240    }
0001f8  e12fff1e          BX       lr
;;;241    #endif
                          ENDP

                  OSTimeSet PROC
;;;256    void  OSTimeSet (INT32U ticks)
;;;257    {
0001fc  e92d4010          PUSH     {r4,lr}
000200  e1a04000          MOV      r4,r0
;;;258    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;259        OS_CPU_SR  cpu_sr = 0;
;;;260    #endif
;;;261    
;;;262    
;;;263    
;;;264        OS_ENTER_CRITICAL();
000204  ebfffffe          BL       OS_CPU_SR_Save
;;;265        OSTime = ticks;
000208  e59f101c          LDR      r1,|L1.556|
00020c  e5814000          STR      r4,[r1,#0]  ; OSTime
;;;266        OS_EXIT_CRITICAL();
000210  e8bd4010          POP      {r4,lr}
000214  eafffffe          B        OS_CPU_SR_Restore
;;;267    }
;;;268    #endif
                          ENDP

                  |L1.536|
000218  00000000          DCD      OSIntNesting
                  |L1.540|
00021c  00000000          DCD      OSTCBCur
                  |L1.544|
000220  00000000          DCD      OSRdyTbl
                  |L1.548|
000224  00000000          DCD      OSRdyGrp
                  |L1.552|
000228  00000000          DCD      OSTCBPrioTbl
                  |L1.556|
00022c  00000000          DCD      OSTime

⌨️ 快捷键说明

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