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

📄 os_time.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 951] for uVision
; commandline ArmCC [--debug -c --asm --interleave -oos_time.o --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips uCosii\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  e59f0254          LDR      r0,|L1.624|
000018  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
00001c  e5d0002f          LDRB     r0,[r0,#0x2f]
000020  e59f124c          LDR      r1,|L1.628|
000024  e7d10000          LDRB     r0,[r1,r0]
000028  e59f1240          LDR      r1,|L1.624|
00002c  e5911000          LDR      r1,[r1,#0]  ; OSTCBCur
000030  e5d11030          LDRB     r1,[r1,#0x30]
000034  e1c00001          BIC      r0,r0,r1
000038  e21000ff          ANDS     r0,r0,#0xff
00003c  e59f122c          LDR      r1,|L1.624|
000040  e5911000          LDR      r1,[r1,#0]  ; OSTCBCur
000044  e5d1102f          LDRB     r1,[r1,#0x2f]
000048  e59f2224          LDR      r2,|L1.628|
00004c  e7c20001          STRB     r0,[r2,r1]
000050  1a000007          BNE      |L1.116|
;;;45                 OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
000054  e59f0214          LDR      r0,|L1.624|
000058  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
00005c  e5d00031          LDRB     r0,[r0,#0x31]
000060  e59f1210          LDR      r1,|L1.632|
000064  e5d11000          LDRB     r1,[r1,#0]  ; OSRdyGrp
000068  e1c10000          BIC      r0,r1,r0
00006c  e59f1204          LDR      r1,|L1.632|
000070  e5c10000          STRB     r0,[r1,#0]  ; OSRdyGrp
;;;46             }
;;;47             OSTCBCur->OSTCBDly = ticks;                                       /* Load ticks in TCB         */
                  |L1.116|
000074  e59f01f4          LDR      r0,|L1.624|
000078  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
00007c  e1c042ba          STRH     r4,[r0,#0x2a]
;;;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  e8bd4010          POP      {r4,lr}
00008c  e12fff1e          BX       lr
                          ENDP

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

⌨️ 快捷键说明

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