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

📄 os_time.txt

📁 在KEIL下成功使用UCOS-II嵌入式操作系统
💻 TXT
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 947] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\os_time.o --device=DARMP -O0 -IC:\Keil\ARM\INC\Philips ..\Source\OS_TIME.C]

                          ARM

                          AREA ||.text.7||, 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  da00001d          BLE      |L1.136|
;;;43             OS_ENTER_CRITICAL();
000010  ef000002          SVC      0x2  ; formerly SWI
;;;44             if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {  /* Delay current task        */
000014  e59f0240          LDR      r0,|L1.604|
000018  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
00001c  e5d0001f          LDRB     r0,[r0,#0x1f]
000020  e59f1238          LDR      r1,|L1.608|
000024  e7d10000          LDRB     r0,[r1,r0]
000028  e59f122c          LDR      r1,|L1.604|
00002c  e5911000          LDR      r1,[r1,#0]  ; OSTCBCur
000030  e5d11020          LDRB     r1,[r1,#0x20]
000034  e1c00001          BIC      r0,r0,r1
000038  e21000ff          ANDS     r0,r0,#0xff
00003c  e59f1218          LDR      r1,|L1.604|
000040  e5911000          LDR      r1,[r1,#0]  ; OSTCBCur
000044  e5d1101f          LDRB     r1,[r1,#0x1f]
000048  e59f2210          LDR      r2,|L1.608|
00004c  e7c20001          STRB     r0,[r2,r1]
000050  1a000007          BNE      |L1.116|
;;;45                 OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
000054  e59f0200          LDR      r0,|L1.604|
000058  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
00005c  e5d00021          LDRB     r0,[r0,#0x21]
000060  e59f11fc          LDR      r1,|L1.612|
000064  e5d11000          LDRB     r1,[r1,#0]  ; OSRdyGrp
000068  e1c10000          BIC      r0,r1,r0
00006c  e59f11f0          LDR      r1,|L1.612|
000070  e5c10000          STRB     r0,[r1,#0]  ; OSRdyGrp
;;;46             }
;;;47             OSTCBCur->OSTCBDly = ticks;                                       /* Load ticks in TCB         */
                  |L1.116|
000074  e59f01e0          LDR      r0,|L1.604|
000078  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
00007c  e1c041ba          STRH     r4,[r0,#0x1a]
;;;48             OS_EXIT_CRITICAL();
000080  ef000003          SVC      0x3  ; formerly SWI
;;;49             OS_Sched();                                                       /* Find next task to run!    */
000084  ebfffffe          BL       OS_Sched
;;;50         }
;;;51     }
                  |L1.136|
000088  e8bd8010          POP      {r4,pc}
                          ENDP

                  OSTimeDlyHMSM PROC
;;;79     INT8U  OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli)
;;;80     {
00008c  e92d47f0          PUSH     {r4-r10,lr}
000090  e1a04000          MOV      r4,r0
000094  e1a05001          MOV      r5,r1
000098  e1a06002          MOV      r6,r2
00009c  e1a07003          MOV      r7,r3
;;;81         INT32U ticks;
;;;82         INT16U loops;
;;;83     
;;;84     
;;;85         if (hours > 0 || minutes > 0 || seconds > 0 || milli > 0) {
0000a0  e3540000          CMP      r4,#0
0000a4  ca000005          BGT      |L1.192|
0000a8  e3550000          CMP      r5,#0
0000ac  ca000003          BGT      |L1.192|
0000b0  e3560000          CMP      r6,#0
0000b4  ca000001          BGT      |L1.192|
0000b8  e3570000          CMP      r7,#0
0000bc  da000029          BLE      |L1.360|
;;;86             if (minutes > 59) {
                  |L1.192|
0000c0  e355003b          CMP      r5,#0x3b
0000c4  da000001          BLE      |L1.208|
;;;87                 return (OS_TIME_INVALID_MINUTES);    /* Validate arguments to be within range              */
0000c8  e3a00051          MOV      r0,#0x51
;;;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    }
                  |L1.204|
0000cc  e8bd87f0          POP      {r4-r10,pc}
                  |L1.208|
0000d0  e356003b          CMP      r6,#0x3b              ;89
0000d4  da000001          BLE      |L1.224|              ;89
0000d8  e3a00052          MOV      r0,#0x52              ;90
0000dc  eafffffa          B        |L1.204|              ;90
                  |L1.224|
0000e0  e3570ffa          CMP      r7,#0x3e8             ;92
0000e4  ba000001          BLT      |L1.240|              ;92
0000e8  e3a00053          MOV      r0,#0x53              ;93
0000ec  eafffff6          B        |L1.204|              ;93
                  |L1.240|
0000f0  e2871002          ADD      r1,r7,#2              ;97
0000f4  e3a020c8          MOV      r2,#0xc8              ;97
0000f8  e0000291          MUL      r0,r1,r2              ;97
0000fc  e3a01ffa          MOV      r1,#0x3e8             ;97
000100  ebfffffe          BL       __aeabi_uidivmod      ;97
000104  e3a01ee1          MOV      r1,#0xe10             ;97
000108  e0010194          MUL      r1,r4,r1              ;97
00010c  e0652205          RSB      r2,r5,r5,LSL #4       ;97
000110  e0811102          ADD      r1,r1,r2,LSL #2       ;97
000114  e0811006          ADD      r1,r1,r6              ;97
000118  e3a02019          MOV      r2,#0x19              ;97
00011c  e0010192          MUL      r1,r2,r1              ;97
000120  e0808181          ADD      r8,r0,r1,LSL #3       ;97
000124  e59f013c          LDR      r0,|L1.616|           ;99
000128  e0009828          AND      r9,r0,r8,LSR #16      ;99
00012c  e0088000          AND      r8,r8,r0              ;100
000130  e1a00008          MOV      r0,r8                 ;101
000134  ebfffffe          BL       OSTimeDly             ;101
000138  ea000006          B        |L1.344|              ;102
                  |L1.316|
00013c  e3a00902          MOV      r0,#0x8000            ;103
000140  ebfffffe          BL       OSTimeDly             ;103
000144  e3a00902          MOV      r0,#0x8000            ;104
000148  ebfffffe          BL       OSTimeDly             ;104
00014c  e2490001          SUB      r0,r9,#1              ;105
000150  e1a09800          LSL      r9,r0,#16             ;105
000154  e1a09829          LSR      r9,r9,#16             ;105
                  |L1.344|
000158  e3590000          CMP      r9,#0                 ;102
00015c  cafffff6          BGT      |L1.316|              ;102
000160  e3a00000          MOV      r0,#0                 ;107
000164  eaffffd8          B        |L1.204|              ;107
                  |L1.360|
000168  e3a00054          MOV      r0,#0x54              ;109
00016c  eaffffd6          B        |L1.204|              ;109
                          ENDP

                  OSTimeDlyResume PROC
;;;138    INT8U  OSTimeDlyResume (INT8U prio)
;;;139    {
000170  e92d4070          PUSH     {r4-r6,lr}
000174  e1a05000          MOV      r5,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) {
000178  e355000c          CMP      r5,#0xc
00017c  ba000001          BLT      |L1.392|
;;;147            return (OS_PRIO_INVALID);
000180  e3a0002a          MOV      r0,#0x2a
;;;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) == 0x00) {  /* 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    }
                  |L1.388|
000184  e8bd8070          POP      {r4-r6,pc}
                  |L1.392|
000188  ef000002          SVC      0x2  ; formerly SWI   ;149
00018c  e59f00d8          LDR      r0,|L1.620|           ;150
000190  e7904105          LDR      r4,[r0,r5,LSL #2]     ;150
000194  e3540000          CMP      r4,#0                 ;151
000198  0a00001e          BEQ      |L1.536|              ;151
00019c  e1d401ba          LDRH     r0,[r4,#0x1a]         ;152
0001a0  e3500000          CMP      r0,#0                 ;152
0001a4  0a000018          BEQ      |L1.524|              ;152
0001a8  e3a00000          MOV      r0,#0                 ;153
0001ac  e1c401ba          STRH     r0,[r4,#0x1a]         ;153
0001b0  e5d4001c          LDRB     r0,[r4,#0x1c]         ;154
0001b4  e3100008          TST      r0,#8                 ;154
0001b8  1a000010          BNE      |L1.512|              ;154
0001bc  e5d40021          LDRB     r0,[r4,#0x21]         ;155
0001c0  e59f109c          LDR      r1,|L1.612|           ;155
0001c4  e5d11000          LDRB     r1,[r1,#0]            ;155  ; OSRdyGrp
0001c8  e1800001          ORR      r0,r0,r1              ;155
0001cc  e59f1090          LDR      r1,|L1.612|           ;155
0001d0  e5c10000          STRB     r0,[r1,#0]            ;155  ; OSRdyGrp
0001d4  e5d4001f          LDRB     r0,[r4,#0x1f]         ;156
0001d8  e59f1080          LDR      r1,|L1.608|           ;156
0001dc  e7d10000          LDRB     r0,[r1,r0]            ;156
0001e0  e5d41020          LDRB     r1,[r4,#0x20]         ;156
0001e4  e1800001          ORR      r0,r0,r1              ;156
0001e8  e5d4101f          LDRB     r1,[r4,#0x1f]         ;156
0001ec  e59f206c          LDR      r2,|L1.608|           ;156
0001f0  e7c20001          STRB     r0,[r2,r1]            ;156
0001f4  ef000003          SVC      0x3  ; formerly SWI   ;157
0001f8  ebfffffe          BL       OS_Sched              ;158
0001fc  ea000000          B        |L1.516|              ;158
                  |L1.512|
000200  ef000003          SVC      0x3  ; formerly SWI   ;160
                  |L1.516|
000204  e3a00000          MOV      r0,#0                 ;162
000208  eaffffdd          B        |L1.388|              ;162
                  |L1.524|
00020c  ef000003          SVC      0x3  ; formerly SWI   ;164
000210  e3a00050          MOV      r0,#0x50              ;165
000214  eaffffda          B        |L1.388|              ;165
                  |L1.536|
000218  ef000003          SVC      0x3  ; formerly SWI   ;168
00021c  e3a0000b          MOV      r0,#0xb               ;169
000220  eaffffd7          B        |L1.388|              ;169
                          ENDP

                  OSTimeGet PROC
;;;187    INT32U  OSTimeGet (void)
;;;188    {
000224  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();
000228  ef000002          SVC      0x2  ; formerly SWI
;;;196        ticks = OSTime;
00022c  e59f003c          LDR      r0,|L1.624|
000230  e5904000          LDR      r4,[r0,#0]  ; OSTime
;;;197        OS_EXIT_CRITICAL();
000234  ef000003          SVC      0x3  ; formerly SWI
;;;198        return (ticks);
000238  e1a00004          MOV      r0,r4
;;;199    }
00023c  e8bd8010          POP      {r4,pc}
                          ENDP

                  OSTimeSet PROC
;;;215    void  OSTimeSet (INT32U ticks)
;;;216    {
000240  e92d4010          PUSH     {r4,lr}
000244  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();
000248  ef000002          SVC      0x2  ; formerly SWI
;;;223        OSTime = ticks;
00024c  e59f001c          LDR      r0,|L1.624|
000250  e5804000          STR      r4,[r0,#0]  ; OSTime
;;;224        OS_EXIT_CRITICAL();
000254  ef000003          SVC      0x3  ; formerly SWI
;;;225    }
000258  e8bd8010          POP      {r4,pc}
                  |L1.604|
00025c  00000000          DCD      OSTCBCur
                  |L1.608|
000260  00000000          DCD      OSRdyTbl
                  |L1.612|
000264  00000000          DCD      OSRdyGrp
                  |L1.616|
000268  0000ffff          DCD      0x0000ffff
                  |L1.620|
00026c  00000000          DCD      OSTCBPrioTbl
                  |L1.624|
000270  00000000          DCD      OSTime
                          ENDP


⌨️ 快捷键说明

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