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

📄 lib_mem.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 -olib_mem.o --depend=lib_mem.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 ..\..\..\..\..\uC-LIB\lib_mem.c]
                          ARM

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  Mem_Set PROC
;;;177                   CPU_SIZE_T   size)
;;;178    {
000000  e92d40f0          PUSH     {r4-r7,lr}
;;;179        CPU_SIZE_T   size_rem;
;;;180        CPU_ALIGN    data_align;
;;;181        CPU_ALIGN   *pmem_align;
;;;182        CPU_INT08U  *pmem_08;
;;;183        CPU_INT08U   mem_align_modulo;
;;;184        CPU_INT08U   i;
;;;185    
;;;186    
;;;187        if (size < 1) {                                             /* See Note #1.                                         */
000004  e3520000          CMP      r2,#0
000008  1a000001          BNE      |L1.20|
                  |L1.12|
;;;188            return;
;;;189        }
;;;190        if (pmem == (void *)0) {
;;;191            return;
;;;192        }
;;;193    
;;;194    
;;;195        data_align = 0;
;;;196        for (i = 0; i < sizeof(CPU_ALIGN); i++) {                   /* Fill each data_align octet with data val.            */
;;;197            data_align <<=  DEF_OCTET_NBR_BITS;
;;;198            data_align  |= (CPU_ALIGN)data_val;
;;;199        }
;;;200    
;;;201        size_rem         = (CPU_SIZE_T)size;
;;;202        mem_align_modulo = (CPU_INT08U)((CPU_ADDR)pmem % sizeof(CPU_ALIGN));    /* See Note #3.                             */
;;;203    
;;;204        pmem_08 = (CPU_INT08U *)pmem;
;;;205        if (mem_align_modulo != 0) {                                /* If leading octets avail,                   ...       */
;;;206            i = mem_align_modulo;
;;;207            while ((size_rem > 0) &&                                /* ... start mem buf fill with leading octets ...       */
;;;208                   (i        < sizeof(CPU_ALIGN ))) {               /* ... until next CPU_ALIGN word boundary.              */
;;;209               *pmem_08++ = data_val;
;;;210                size_rem -= sizeof(CPU_INT08U);
;;;211                i++;
;;;212            }
;;;213        }
;;;214    
;;;215        pmem_align = (CPU_ALIGN *)pmem_08;                          /* See Note #2a.                                        */
;;;216        while (size_rem >= sizeof(CPU_ALIGN)) {                     /* While mem buf aligned on CPU_ALIGN word boundaries,  */
;;;217           *pmem_align++ = data_align;                              /* ... fill mem buf with    CPU_ALIGN-sized data.       */
;;;218            size_rem    -= sizeof(CPU_ALIGN);
;;;219        }
;;;220    
;;;221        pmem_08 = (CPU_INT08U *)pmem_align;
;;;222        while (size_rem > 0) {                                      /* Finish mem buf fill with trailing octets.            */
;;;223           *pmem_08++   = data_val;
;;;224            size_rem   -= sizeof(CPU_INT08U);
;;;225        }
;;;226    }
00000c  e8bd40f0          POP      {r4-r7,lr}
000010  e12fff1e          BX       lr
                  |L1.20|
000014  e3500000          CMP      r0,#0
000018  1a000000          BNE      |L1.32|
00001c  eafffffa          B        |L1.12|
                  |L1.32|
000020  e3a0c000          MOV      r12,#0
000024  e3a06000          MOV      r6,#0
000028  ea000003          B        |L1.60|
                  |L1.44|
00002c  e1a0c40c          LSL      r12,r12,#8
000030  e18cc001          ORR      r12,r12,r1
000034  e2867001          ADD      r7,r6,#1
000038  e20760ff          AND      r6,r7,#0xff
                  |L1.60|
00003c  e3560004          CMP      r6,#4
000040  3afffff9          BCC      |L1.44|
000044  e1a03002          MOV      r3,r2
000048  e200e003          AND      lr,r0,#3
00004c  e1a05000          MOV      r5,r0
000050  e35e0000          CMP      lr,#0
000054  0a000009          BEQ      |L1.128|
000058  e1a0600e          MOV      r6,lr
00005c  ea000003          B        |L1.112|
                  |L1.96|
000060  e4c51001          STRB     r1,[r5],#1
000064  e2433001          SUB      r3,r3,#1
000068  e2867001          ADD      r7,r6,#1
00006c  e20760ff          AND      r6,r7,#0xff
                  |L1.112|
000070  e3530000          CMP      r3,#0
000074  0a000001          BEQ      |L1.128|
000078  e3560004          CMP      r6,#4
00007c  3afffff7          BCC      |L1.96|
                  |L1.128|
000080  e1a04005          MOV      r4,r5
000084  ea000001          B        |L1.144|
                  |L1.136|
000088  e484c004          STR      r12,[r4],#4
00008c  e2433004          SUB      r3,r3,#4
                  |L1.144|
000090  e3530004          CMP      r3,#4
000094  2afffffb          BCS      |L1.136|
000098  e1a05004          MOV      r5,r4
00009c  ea000001          B        |L1.168|
                  |L1.160|
0000a0  e4c51001          STRB     r1,[r5],#1
0000a4  e2433001          SUB      r3,r3,#1
                  |L1.168|
0000a8  e3530000          CMP      r3,#0
0000ac  1afffffb          BNE      |L1.160|
0000b0  eaffffd5          B        |L1.12|
                          ENDP

                  Mem_Clr PROC
;;;134                   CPU_SIZE_T   size)
;;;135    {
0000b4  e92d4030          PUSH     {r4,r5,lr}
0000b8  e1a04000          MOV      r4,r0
0000bc  e1a05001          MOV      r5,r1
;;;136        Mem_Set((void     *)pmem,
0000c0  e1a02005          MOV      r2,r5
0000c4  e3a01000          MOV      r1,#0
0000c8  e1a00004          MOV      r0,r4
0000cc  ebfffffe          BL       Mem_Set
;;;137                (CPU_INT08U)0,                                      /* See Note #2.                                         */
;;;138                (CPU_SIZE_T)size);
;;;139    }
0000d0  e8bd4030          POP      {r4,r5,lr}
0000d4  e12fff1e          BX       lr
                          ENDP

                  Mem_Copy PROC
;;;269                    CPU_SIZE_T   size)
;;;270    {
0000d8  e92d47f0          PUSH     {r4-r10,lr}
;;;271        CPU_SIZE_T    size_rem;
;;;272        CPU_ALIGN    *pmem_align_dest;
;;;273        CPU_ALIGN    *pmem_align_src;
;;;274        CPU_INT08U   *pmem_08_dest;
;;;275        CPU_INT08U   *pmem_08_src;
;;;276        CPU_INT08U    i;
;;;277        CPU_INT08U    mem_align_modulo_dest;
;;;278        CPU_INT08U    mem_align_modulo_src;
;;;279        CPU_BOOLEAN   mem_aligned;
;;;280    
;;;281    
;;;282        if (size < 1) {                                             /* See Note #1.                                         */
0000dc  e3520000          CMP      r2,#0
0000e0  1a000001          BNE      |L1.236|
                  |L1.228|
;;;283            return;
;;;284        }
;;;285        if (pdest == (void *)0) {
;;;286            return;
;;;287        }
;;;288        if (psrc  == (void *)0) {
;;;289            return;
;;;290        }
;;;291    
;;;292    
;;;293        size_rem              = (CPU_SIZE_T  )size;
;;;294    
;;;295        pmem_08_dest          = (CPU_INT08U *)pdest;
;;;296        pmem_08_src           = (CPU_INT08U *)psrc;
;;;297                                                                    /* See Note #4.                                         */
;;;298        mem_align_modulo_dest = (CPU_INT08U  )((CPU_ADDR)pmem_08_dest % sizeof(CPU_ALIGN));
;;;299        mem_align_modulo_src  = (CPU_INT08U  )((CPU_ADDR)pmem_08_src  % sizeof(CPU_ALIGN));
;;;300    
;;;301        mem_aligned           = (mem_align_modulo_dest == mem_align_modulo_src) ? DEF_YES : DEF_NO;
;;;302    
;;;303        if (mem_aligned == DEF_YES) {                               /* If mem bufs' alignment offset equal, ...             */
;;;304                                                                    /* ... optimize copy for mem buf alignment.             */
;;;305            if (mem_align_modulo_dest != 0) {                       /* If leading octets avail,                   ...       */
;;;306                i = mem_align_modulo_dest;
;;;307                while ((size_rem   >  0) &&                         /* ... start mem buf copy with leading octets ...       */
;;;308                       (i          <  sizeof(CPU_ALIGN ))) {        /* ... until next CPU_ALIGN word boundary.              */
;;;309                   *pmem_08_dest++ = *pmem_08_src++;
;;;310                    size_rem      -=  sizeof(CPU_INT08U);
;;;311                    i++;
;;;312                }
;;;313            }
;;;314    
;;;315            pmem_align_dest = (CPU_ALIGN *)pmem_08_dest;            /* See Note #3a.                                        */
;;;316            pmem_align_src  = (CPU_ALIGN *)pmem_08_src;
;;;317            while (size_rem      >=  sizeof(CPU_ALIGN)) {           /* While mem bufs aligned on CPU_ALIGN word boundaries, */
;;;318               *pmem_align_dest++ = *pmem_align_src++;              /* ... copy psrc to pdest with CPU_ALIGN-sized words.   */
;;;319                size_rem         -=  sizeof(CPU_ALIGN);
;;;320            }
;;;321    
;;;322            pmem_08_dest = (CPU_INT08U *)pmem_align_dest;
;;;323            pmem_08_src  = (CPU_INT08U *)pmem_align_src;
;;;324        }
;;;325    
;;;326        while (size_rem > 0) {                                      /* For unaligned mem bufs or trailing octets, ...       */
;;;327           *pmem_08_dest++ = *pmem_08_src++;                        /* ... copy psrc to pdest by octets.                    */
;;;328            size_rem      -=  sizeof(CPU_INT08U);
;;;329        }
;;;330    }
0000e4  e8bd47f0          POP      {r4-r10,lr}
0000e8  e12fff1e          BX       lr
                  |L1.236|
0000ec  e3500000          CMP      r0,#0
0000f0  1a000000          BNE      |L1.248|
0000f4  eafffffa          B        |L1.228|
                  |L1.248|
0000f8  e3510000          CMP      r1,#0
0000fc  1a000000          BNE      |L1.260|
000100  eafffff7          B        |L1.228|
                  |L1.260|
000104  e1a03002          MOV      r3,r2
000108  e1a05000          MOV      r5,r0
00010c  e1a06001          MOV      r6,r1
000110  e1a00005          MOV      r0,r5
000114  e205e003          AND      lr,r5,#3
000118  e1a01006          MOV      r1,r6
00011c  e2068003          AND      r8,r6,#3
000120  e15e0008          CMP      lr,r8
000124  1a000001          BNE      |L1.304|
000128  e3a0a001          MOV      r10,#1
00012c  ea000000          B        |L1.308|
                  |L1.304|
000130  e3a0a000          MOV      r10,#0
                  |L1.308|
000134  e20a90ff          AND      r9,r10,#0xff
000138  e3590001          CMP      r9,#1
00013c  1a000016          BNE      |L1.412|
000140  e35e0000          CMP      lr,#0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -