?? os_time.txt
字號:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 951] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\ULINK-RAM\Obj\os_time.o --device=DARMATS --apcs=interwork -I..\..\..\..\uCOS-II\Source -I..\..\..\..\uCOS-II\Ports\ARM\Generic\KEILRV -I.\APP -I.\BSP -IC:\DEVELOP\Keil\ARM\INC\Atmel\SAM7S ..\..\..\..\uCOS-II\Source\os_time.c]
ARM
AREA ||.text.7||, CODE, READONLY, ALIGN=2
OSTimeDly PROC
;;;36 void OSTimeDly (INT16U ticks)
;;;37 {
000000 e92d4010 PUSH {r4,lr}
000004 e1b04000 MOVS r4,r0
;;;38 INT8U y;
;;;39 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;40 OS_CPU_SR cpu_sr = 0;
;;;41 #endif
;;;42
;;;43
;;;44
;;;45 if (ticks > 0) { /* 0 means no delay! */
000008 0a000011 BEQ |L1.84|
;;;46 OS_ENTER_CRITICAL();
00000c ebfffffe BL OS_CPU_SR_Save
;;;47 y = OSTCBCur->OSTCBY; /* Delay current task */
000010 e59f10cc LDR r1,|L1.228|
;;;48 OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX;
000014 e59fc0cc LDR r12,|L1.232|
000018 e5911000 LDR r1,[r1,#0] ;47 ; OSTCBCur
00001c e5d12022 LDRB r2,[r1,#0x22] ;47
000020 e5d1e023 LDRB lr,[r1,#0x23]
000024 e7dc3002 LDRB r3,[r12,r2]
000028 e1d3300e BICS r3,r3,lr
00002c e7cc3002 STRB r3,[r12,r2]
;;;49 if (OSRdyTbl[y] == 0) {
;;;50 OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
000030 059f20b4 LDREQ r2,|L1.236|
000034 05d13024 LDRBEQ r3,[r1,#0x24]
000038 05d2c000 LDRBEQ r12,[r2,#0] ; OSRdyGrp
00003c 01cc3003 BICEQ r3,r12,r3
000040 05c23000 STRBEQ r3,[r2,#0] ; OSRdyGrp
;;;51 }
;;;52 OSTCBCur->OSTCBDly = ticks; /* Load ticks in TCB */
000044 e1c141bc STRH r4,[r1,#0x1c]
;;;53 OS_EXIT_CRITICAL();
000048 ebfffffe BL OS_CPU_SR_Restore
;;;54 OS_Sched(); /* Find next task to run! */
00004c e8bd4010 POP {r4,lr}
000050 eafffffe B OS_Sched
;;;55 }
;;;56 }
|L1.84|
000054 e8bd4010 POP {r4,lr}
000058 e12fff1e BX lr
ENDP
OSTimeDlyHMSM PROC
;;;84 INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli)
;;;85 {
00005c e92d4070 PUSH {r4-r6,lr}
000060 e1a06000 MOV r6,r0
000064 e1a04001 MOV r4,r1
;;;86 INT32U ticks;
;;;87 INT16U loops;
;;;88
;;;89
;;;90 #if OS_ARG_CHK_EN > 0
;;;91 if (hours == 0) {
;;;92 if (minutes == 0) {
;;;93 if (seconds == 0) {
;;;94 if (milli == 0) {
;;;95 return (OS_TIME_ZERO_DLY);
;;;96 }
;;;97 }
;;;98 }
;;;99 }
;;;100 if (minutes > 59) {
;;;101 return (OS_TIME_INVALID_MINUTES); /* Validate arguments to be within range */
;;;102 }
;;;103 if (seconds > 59) {
;;;104 return (OS_TIME_INVALID_SECONDS);
;;;105 }
;;;106 if (milli > 999) {
;;;107 return (OS_TIME_INVALID_MILLI);
;;;108 }
;;;109 #endif
;;;110 /* Compute the total number of clock ticks required.. */
;;;111 /* .. (rounded to the nearest tick) */
;;;112 ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC
000068 e2830005 ADD r0,r3,#5
00006c e3a01064 MOV r1,#0x64
000070 e0000091 MUL r0,r1,r0
000074 e1a05002 MOV r5,r2 ;85
000078 e3a01ffa MOV r1,#0x3e8
00007c ebfffffe BL __aeabi_uidivmod
000080 e3a01ee1 MOV r1,#0xe10
000084 e0010196 MUL r1,r6,r1
000088 e0642204 RSB r2,r4,r4,LSL #4
00008c e0811102 ADD r1,r1,r2,LSL #2
000090 e0811005 ADD r1,r1,r5
000094 e3a02019 MOV r2,#0x19
000098 e0010192 MUL r1,r2,r1
00009c e0800101 ADD r0,r0,r1,LSL #2
;;;113 + OS_TICKS_PER_SEC * ((INT32U)milli + 500L / OS_TICKS_PER_SEC) / 1000L;
;;;114 loops = (INT16U)(ticks / 65536L); /* Compute the integral number of 65536 tick delays */
0000a0 e1a04820 LSR r4,r0,#16
;;;115 ticks = ticks % 65536L; /* Obtain the fractional number of ticks */
0000a4 e1a00800 LSL r0,r0,#16
0000a8 e1a00820 LSR r0,r0,#16
;;;116 OSTimeDly((INT16U)ticks);
0000ac ebfffffe BL OSTimeDly
;;;117 while (loops > 0) {
0000b0 ea000006 B |L1.208|
;;;118 OSTimeDly((INT16U)32768u);
|L1.180|
0000b4 e3a00902 MOV r0,#0x8000
0000b8 ebfffffe BL OSTimeDly
;;;119 OSTimeDly((INT16U)32768u);
0000bc e3a00902 MOV r0,#0x8000
0000c0 ebfffffe BL OSTimeDly
;;;120 loops--;
0000c4 e2440001 SUB r0,r4,#1
0000c8 e1a04800 LSL r4,r0,#16
0000cc e1a04824 LSR r4,r4,#16
|L1.208|
0000d0 e3540000 CMP r4,#0 ;117
0000d4 1afffff6 BNE |L1.180| ;117
;;;121 }
;;;122 return (OS_NO_ERR);
0000d8 e8bd4070 POP {r4-r6,lr}
0000dc e3a00000 MOV r0,#0
;;;123 }
0000e0 e12fff1e BX lr
|L1.228|
0000e4 00000000 DCD OSTCBCur
|L1.232|
0000e8 00000000 DCD OSRdyTbl
|L1.236|
0000ec 00000000 DCD OSRdyGrp
ENDP
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -