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

📄 lib_mem.txt

📁 ucos2 is a file system for embedded applications which can be used on any media, for which you can p
💻 TXT
📖 第 1 页 / 共 2 页
字号:
                  |L1.192|
0000c0  e4d1c001          LDRB     r12,[r1],#1           ;310
0000c4  e2833001          ADD      r3,r3,#1              ;312
0000c8  e2522001          SUBS     r2,r2,#1              ;311
0000cc  e20330ff          AND      r3,r3,#0xff           ;312
0000d0  e4c0c001          STRB     r12,[r0],#1           ;310
0000d4  0a000005          BEQ      |L1.240|
                  |L1.216|
0000d8  e3530004          CMP      r3,#4                 ;309
0000dc  3afffff7          BCC      |L1.192|
0000e0  ea000002          B        |L1.240|
                  |L1.228|
0000e4  e4913004          LDR      r3,[r1],#4            ;319
0000e8  e2422004          SUB      r2,r2,#4              ;320
0000ec  e4803004          STR      r3,[r0],#4            ;320
                  |L1.240|
0000f0  e3520004          CMP      r2,#4                 ;318
0000f4  2afffffa          BCS      |L1.228|
0000f8  ea000002          B        |L1.264|
                  |L1.252|
0000fc  e4d13001          LDRB     r3,[r1],#1            ;328
000100  e2422001          SUB      r2,r2,#1              ;329
000104  e4c03001          STRB     r3,[r0],#1            ;328
                  |L1.264|
000108  e3520000          CMP      r2,#0                 ;327
00010c  1afffffa          BNE      |L1.252|
000110  e12fff1e          BX       lr
;;;332    #endif
                          ENDP

                  Mem_Cmp PROC
;;;391    
;;;392        if (size < 1) {                                             /* See Note #1.                                         */
000114  e3520000          CMP      r2,#0
000118  e1a03000          MOV      r3,r0
00011c  e92d4010          PUSH     {r4,lr}
;;;393            return (DEF_YES);
000120  03a00001          MOVEQ    r0,#1
000124  0a00002e          BEQ      |L1.484|
;;;394        }
;;;395        if (p1_mem == (void *)0) {
000128  e3530000          CMP      r3,#0
;;;396            return (DEF_NO);
;;;397        }
;;;398        if (p2_mem == (void *)0) {
00012c  13510000          CMPNE    r1,#0
;;;399            return (DEF_NO);
000130  03a00000          MOVEQ    r0,#0
000134  0a00002a          BEQ      |L1.484|
;;;400        }
;;;401    
;;;402    
;;;403        mem_cmp            =  DEF_YES;
;;;404        size_rem           =  size;
;;;405                                                                    /* Start @ end of mem bufs (see Note #2).               */
;;;406        p1_mem_08          = (CPU_INT08U *)p1_mem + size;
000138  e0833002          ADD      r3,r3,r2
;;;407        p2_mem_08          = (CPU_INT08U *)p2_mem + size;
00013c  e0811002          ADD      r1,r1,r2
;;;408                                                                    /* See Note #4.                                         */
;;;409        mem_align_modulo_1 = (CPU_INT08U  )((CPU_ADDR)p1_mem_08 % sizeof(CPU_ALIGN));
000140  e203c003          AND      r12,r3,#3
;;;410        mem_align_modulo_2 = (CPU_INT08U  )((CPU_ADDR)p2_mem_08 % sizeof(CPU_ALIGN));
000144  e201e003          AND      lr,r1,#3
;;;411    
;;;412        mem_aligned        = (mem_align_modulo_1 == mem_align_modulo_2) ? DEF_YES : DEF_NO;
000148  e15c000e          CMP      r12,lr
00014c  13a0e000          MOVNE    lr,#0
000150  03a0e001          MOVEQ    lr,#1
;;;413    
;;;414        if (mem_aligned == DEF_YES) {                               /* If mem bufs' alignment offset equal, ...             */
000154  e35e0001          CMP      lr,#1
000158  e3a00001          MOV      r0,#1                 ;403
00015c  1a000017          BNE      |L1.448|
                  |L1.352|
;;;415                                                                    /* ... optimize cmp for mem buf alignment.              */
;;;416            if (mem_align_modulo_1 != 0) {                          /* If trailing octets avail,                  ...       */
000160  e35c0000          CMP      r12,#0
000164  0a000012          BEQ      |L1.436|
;;;417                i = mem_align_modulo_1;
;;;418                while ((mem_cmp == DEF_YES) &&                      /* ... cmp mem bufs while identical &         ...       */
;;;419                       (size_rem > 0)       &&                      /* ... start mem buf cmp with trailing octets ...       */
;;;420                       (i        > 0)) {                            /* ... until next CPU_ALIGN word boundary.              */
;;;421                    p1_mem_08--;
;;;422                    p2_mem_08--;
;;;423                    if (*p1_mem_08 != *p2_mem_08) {                 /* If ANY data octet(s) NOT identical, cmp fails.       */
000168  e573e001          LDRB     lr,[r3,#-1]!
00016c  e5714001          LDRB     r4,[r1,#-1]!
;;;424                         mem_cmp = DEF_NO;
;;;425                    }
;;;426                    size_rem -= sizeof(CPU_INT08U);
;;;427                    i--;
000170  e24cc001          SUB      r12,r12,#1
000174  e2422001          SUB      r2,r2,#1              ;426
000178  e15e0004          CMP      lr,r4                 ;423
00017c  13a00000          MOVNE    r0,#0                 ;424
000180  e3500001          CMP      r0,#1                 ;418
000184  e20cc0ff          AND      r12,r12,#0xff
000188  1a000015          BNE      |L1.484|
00018c  e3520000          CMP      r2,#0                 ;419
000190  1afffff2          BNE      |L1.352|
000194  ea000006          B        |L1.436|
                  |L1.408|
;;;428                }
;;;429            }
;;;430    
;;;431            if (mem_cmp == DEF_YES) {                               /* If cmp still identical, cmp aligned mem bufs.        */
;;;432                p1_mem_align = (CPU_ALIGN *)p1_mem_08;              /* See Note #3a.                                        */
;;;433                p2_mem_align = (CPU_ALIGN *)p2_mem_08;
;;;434    
;;;435                while ((mem_cmp  == DEF_YES) &&                     /* Cmp mem bufs while identical & ...                   */
;;;436                       (size_rem >= sizeof(CPU_ALIGN))) {           /* ... mem bufs aligned on CPU_ALIGN word boundaries.   */
;;;437                    p1_mem_align--;
;;;438                    p2_mem_align--;
;;;439                    if (*p1_mem_align != *p2_mem_align) {           /* If ANY data octet(s) NOT identical, cmp fails.       */
000198  e533c004          LDR      r12,[r3,#-4]!
00019c  e531e004          LDR      lr,[r1,#-4]!
;;;440                         mem_cmp = DEF_NO;
;;;441                    }
;;;442                    size_rem -= sizeof(CPU_ALIGN);
0001a0  e2422004          SUB      r2,r2,#4
0001a4  e15c000e          CMP      r12,lr                ;439
0001a8  13a00000          MOVNE    r0,#0                 ;440
0001ac  e3500001          CMP      r0,#1                 ;435
0001b0  1a000007          BNE      |L1.468|
                  |L1.436|
0001b4  e3520004          CMP      r2,#4                 ;436
0001b8  2afffff6          BCS      |L1.408|
0001bc  ea000004          B        |L1.468|
                  |L1.448|
;;;443                }
;;;444    
;;;445                p1_mem_08 = (CPU_INT08U *)p1_mem_align;
;;;446                p2_mem_08 = (CPU_INT08U *)p2_mem_align;
;;;447            }
;;;448        }
;;;449    
;;;450        while ((mem_cmp == DEF_YES) &&                              /* Cmp mem bufs while identical ...                     */
;;;451               (size_rem > 0)) {                                    /* ... for unaligned mem bufs or trailing octets.       */
;;;452            p1_mem_08--;
;;;453            p2_mem_08--;
;;;454            if (*p1_mem_08 != *p2_mem_08) {                         /* If ANY data octet(s) NOT identical, cmp fails.       */
0001c0  e573c001          LDRB     r12,[r3,#-1]!
0001c4  e571e001          LDRB     lr,[r1,#-1]!
;;;455                 mem_cmp = DEF_NO;
;;;456            }
;;;457            size_rem -= sizeof(CPU_INT08U);
0001c8  e2422001          SUB      r2,r2,#1
0001cc  e15c000e          CMP      r12,lr                ;454
0001d0  13a00000          MOVNE    r0,#0                 ;455
                  |L1.468|
0001d4  e3500001          CMP      r0,#1                 ;450
0001d8  1a000001          BNE      |L1.484|
0001dc  e3520000          CMP      r2,#0                 ;451
0001e0  1afffff6          BNE      |L1.448|
                  |L1.484|
0001e4  e8bd4010          POP      {r4,lr}               ;451
;;;458        }
;;;459    
;;;460        return (mem_cmp);
;;;461    }
0001e8  e12fff1e          BX       lr
;;;462    
                          ENDP

⌨️ 快捷键说明

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