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

📄 os_time.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; 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 + -