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

📄 os_time.txt

📁 ATMEL ARM7 SAM64 Porting ucos / Keil ARM VER3.04。不同于其它
💻 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 + -