📄 os_time.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 903] for uVision
; commandline ArmCC [--debug -c --asm --interleave -oos_time.o --depend=os_time.d --device=DARMP --apcs=interwork -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\ARM\Generic\RVMDK -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\ARM\RVMDK -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uCOSView\Source -I..\..\..\..\..\uCOSView\Ports\ARM7\LPC2468\IAR -Id:\Keil\ARM\INC\Philips ..\..\..\..\..\uCOS-II\Source\os_time.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
OSTimeDly PROC
;;;44 void OSTimeDly (INT16U ticks)
;;;45 {
000000 e92d4070 PUSH {r4-r6,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;
000008 e3a06000 MOV r6,#0
;;;49 #endif
;;;50
;;;51
;;;52
;;;53 if (ticks > 0) { /* 0 means no delay! */
00000c e3540000 CMP r4,#0
000010 da00001e BLE |L1.144|
;;;54 OS_ENTER_CRITICAL();
000014 ebfffffe BL OS_CPU_SR_Save
000018 e1a06000 MOV r6,r0
;;;55 y = OSTCBCur->OSTCBY; /* Delay current task */
00001c e59f02c8 LDR r0,|L1.748|
000020 e5900000 LDR r0,[r0,#0] ; OSTCBCur
000024 e5d05030 LDRB r5,[r0,#0x30]
;;;56 OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX;
000028 e59f02c0 LDR r0,|L1.752|
00002c e7d00005 LDRB r0,[r0,r5]
000030 e59f12b4 LDR r1,|L1.748|
000034 e5911000 LDR r1,[r1,#0] ; OSTCBCur
000038 e5d11031 LDRB r1,[r1,#0x31]
00003c e1c00001 BIC r0,r0,r1
000040 e59f12a8 LDR r1,|L1.752|
000044 e7c10005 STRB r0,[r1,r5]
;;;57 if (OSRdyTbl[y] == 0) {
000048 e2810000 ADD r0,r1,#0
00004c e7d00005 LDRB r0,[r0,r5]
000050 e3500000 CMP r0,#0
000054 1a000007 BNE |L1.120|
;;;58 OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
000058 e59f028c LDR r0,|L1.748|
00005c e5900000 LDR r0,[r0,#0] ; OSTCBCur
000060 e5d00032 LDRB r0,[r0,#0x32]
000064 e59f1288 LDR r1,|L1.756|
000068 e5d11000 LDRB r1,[r1,#0] ; OSRdyGrp
00006c e1c10000 BIC r0,r1,r0
000070 e59f127c LDR r1,|L1.756|
000074 e5c10000 STRB r0,[r1,#0] ; OSRdyGrp
|L1.120|
;;;59 }
;;;60 OSTCBCur->OSTCBDly = ticks; /* Load ticks in TCB */
000078 e59f026c LDR r0,|L1.748|
00007c e5900000 LDR r0,[r0,#0] ; OSTCBCur
000080 e1c042ba STRH r4,[r0,#0x2a]
;;;61 OS_EXIT_CRITICAL();
000084 e1a00006 MOV r0,r6
000088 ebfffffe BL OS_CPU_SR_Restore
;;;62 OS_Sched(); /* Find next task to run! */
00008c ebfffffe BL OS_Sched
|L1.144|
;;;63 }
;;;64 }
000090 e8bd4070 POP {r4-r6,lr}
000094 e12fff1e BX lr
ENDP
OSTimeDlyHMSM PROC
;;;92 INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U ms)
;;;93 {
000098 e92d47f0 PUSH {r4-r10,lr}
00009c e1a04000 MOV r4,r0
0000a0 e1a05001 MOV r5,r1
0000a4 e1a06002 MOV r6,r2
0000a8 e1a07003 MOV r7,r3
;;;94 INT32U ticks;
;;;95 INT16U loops;
;;;96
;;;97
;;;98 #if OS_ARG_CHK_EN > 0
;;;99 if (hours == 0) {
0000ac e3540000 CMP r4,#0
0000b0 1a000008 BNE |L1.216|
;;;100 if (minutes == 0) {
0000b4 e3550000 CMP r5,#0
0000b8 1a000006 BNE |L1.216|
;;;101 if (seconds == 0) {
0000bc e3560000 CMP r6,#0
0000c0 1a000004 BNE |L1.216|
;;;102 if (ms == 0) {
0000c4 e3570000 CMP r7,#0
0000c8 1a000002 BNE |L1.216|
;;;103 return (OS_ERR_TIME_ZERO_DLY);
0000cc e3a00054 MOV r0,#0x54
|L1.208|
0000d0 e8bd47f0 POP {r4-r10,lr}
;;;104 }
;;;105 }
;;;106 }
;;;107 }
;;;108 if (minutes > 59) {
;;;109 return (OS_ERR_TIME_INVALID_MINUTES); /* Validate arguments to be within range */
;;;110 }
;;;111 if (seconds > 59) {
;;;112 return (OS_ERR_TIME_INVALID_SECONDS);
;;;113 }
;;;114 if (ms > 999) {
;;;115 return (OS_ERR_TIME_INVALID_MS);
;;;116 }
;;;117 #endif
;;;118 /* Compute the total number of clock ticks required.. */
;;;119 /* .. (rounded to the nearest tick) */
;;;120 ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC
;;;121 + OS_TICKS_PER_SEC * ((INT32U)ms + 500L / OS_TICKS_PER_SEC) / 1000L;
;;;122 loops = (INT16U)(ticks / 65536L); /* Compute the integral number of 65536 tick delays */
;;;123 ticks = ticks % 65536L; /* Obtain the fractional number of ticks */
;;;124 OSTimeDly((INT16U)ticks);
;;;125 while (loops > 0) {
;;;126 OSTimeDly((INT16U)32768u);
;;;127 OSTimeDly((INT16U)32768u);
;;;128 loops--;
;;;129 }
;;;130 return (OS_ERR_NONE);
;;;131 }
0000d4 e12fff1e BX lr
|L1.216|
0000d8 e355003b CMP r5,#0x3b
0000dc da000001 BLE |L1.232|
0000e0 e3a00051 MOV r0,#0x51
0000e4 eafffff9 B |L1.208|
|L1.232|
0000e8 e356003b CMP r6,#0x3b
0000ec da000001 BLE |L1.248|
0000f0 e3a00052 MOV r0,#0x52
0000f4 eafffff5 B |L1.208|
|L1.248|
0000f8 e3570ffa CMP r7,#0x3e8
0000fc ba000001 BLT |L1.264|
000100 e3a00053 MOV r0,#0x53
000104 eafffff1 B |L1.208|
|L1.264|
000108 e2871000 ADD r1,r7,#0
00010c e3a02ffa MOV r2,#0x3e8
000110 e0000291 MUL r0,r1,r2
000114 e1a01002 MOV r1,r2
000118 ebfffffe BL __aeabi_uidivmod
00011c e3a01ee1 MOV r1,#0xe10
000120 e0010194 MUL r1,r4,r1
000124 e0652205 RSB r2,r5,r5,LSL #4
000128 e0811102 ADD r1,r1,r2,LSL #2
00012c e0811006 ADD r1,r1,r6
000130 e3a0207d MOV r2,#0x7d
000134 e0010192 MUL r1,r2,r1
000138 e0808181 ADD r8,r0,r1,LSL #3
00013c e59f01b4 LDR r0,|L1.760|
000140 e0009828 AND r9,r0,r8,LSR #16
000144 e0088000 AND r8,r8,r0
000148 e1a00008 MOV r0,r8
00014c ebfffffe BL OSTimeDly
000150 ea000006 B |L1.368|
|L1.340|
000154 e3a00902 MOV r0,#0x8000
000158 ebfffffe BL OSTimeDly
00015c e3a00902 MOV r0,#0x8000
000160 ebfffffe BL OSTimeDly
000164 e2490001 SUB r0,r9,#1
000168 e1a09800 LSL r9,r0,#16
00016c e1a09829 LSR r9,r9,#16
|L1.368|
000170 e3590000 CMP r9,#0
000174 cafffff6 BGT |L1.340|
000178 e3a00000 MOV r0,#0
00017c eaffffd3 B |L1.208|
ENDP
OSTimeDlyResume PROC
;;;160 INT8U OSTimeDlyResume (INT8U prio)
;;;161 {
000180 e92d4070 PUSH {r4-r6,lr}
000184 e1a04000 MOV r4,r0
;;;162 OS_TCB *ptcb;
;;;163 #if OS_CRITICAL_METHOD == 3 /* Storage for CPU status register */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -