📄 os_time.txt
字号:
; 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 + -