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

📄 lib_mem.txt

📁 ucos2.86版本结合STM板极支持包
💻 TXT
📖 第 1 页 / 共 2 页
字号:
0000b8  d006              BEQ      |L1.200|
                  |L1.186|
;;;328           *pmem_08_dest++ = *pmem_08_src++;                        /* ... copy psrc to pdest by octets.                    */
0000ba  f811f811          LDRB     r3,[r1],#1
0000be  f800f800          STRB     r3,[r0],#1
;;;329            size_rem      -=  sizeof(CPU_INT08U);
0000c2  1e52              SUBS     r2,r2,#1
0000c4  2a00              CMP      r2,#0
0000c6  d1f8              BNE      |L1.186|
                  |L1.200|
;;;330        }
;;;331    }
0000c8  4770              BX       lr
;;;332    #endif
                          ENDP

                  Mem_Cmp PROC
;;;378                          CPU_SIZE_T   size)
;;;379    {
0000ca  b430              PUSH     {r4,r5}
0000cc  4603              MOV      r3,r0
;;;380        CPU_SIZE_T    size_rem;
;;;381        CPU_ALIGN    *p1_mem_align;
;;;382        CPU_ALIGN    *p2_mem_align;
;;;383        CPU_INT08U   *p1_mem_08;
;;;384        CPU_INT08U   *p2_mem_08;
;;;385        CPU_INT08U    i;
;;;386        CPU_INT08U    mem_align_modulo_1;
;;;387        CPU_INT08U    mem_align_modulo_2;
;;;388        CPU_BOOLEAN   mem_aligned;
;;;389        CPU_BOOLEAN   mem_cmp;
;;;390    
;;;391    
;;;392        if (size < 1) {                                             /* See Note #1.                                         */
0000ce  b912              CBNZ     r2,|L1.214|
;;;393            return (DEF_YES);
;;;394        }
;;;395        if (p1_mem == (void *)0) {
;;;396            return (DEF_NO);
;;;397        }
;;;398        if (p2_mem == (void *)0) {
;;;399            return (DEF_NO);
;;;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;
;;;407        p2_mem_08          = (CPU_INT08U *)p2_mem + size;
;;;408                                                                    /* See Note #4.                                         */
;;;409        mem_align_modulo_1 = (CPU_INT08U  )((CPU_ADDR)p1_mem_08 % sizeof(CPU_ALIGN));
;;;410        mem_align_modulo_2 = (CPU_INT08U  )((CPU_ADDR)p2_mem_08 % sizeof(CPU_ALIGN));
;;;411    
;;;412        mem_aligned        = (mem_align_modulo_1 == mem_align_modulo_2) ? DEF_YES : DEF_NO;
;;;413    
;;;414        if (mem_aligned == DEF_YES) {                               /* If mem bufs' alignment offset equal, ...             */
;;;415                                                                    /* ... optimize cmp for mem buf alignment.              */
;;;416            if (mem_align_modulo_1 != 0) {                          /* If trailing octets avail,                  ...       */
;;;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.       */
;;;424                         mem_cmp = DEF_NO;
;;;425                    }
;;;426                    size_rem -= sizeof(CPU_INT08U);
;;;427                    i--;
;;;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.       */
;;;440                         mem_cmp = DEF_NO;
;;;441                    }
;;;442                    size_rem -= sizeof(CPU_ALIGN);
;;;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.       */
;;;455                 mem_cmp = DEF_NO;
;;;456            }
;;;457            size_rem -= sizeof(CPU_INT08U);
;;;458        }
;;;459    
;;;460        return (mem_cmp);
;;;461    }
0000d0  bc30              POP      {r4,r5}
0000d2  2001              MOVS     r0,#1
0000d4  4770              BX       lr
                  |L1.214|
0000d6  b913              CBNZ     r3,|L1.222|
0000d8  bc30              POP      {r4,r5}
0000da  2000              MOVS     r0,#0
0000dc  4770              BX       lr
                  |L1.222|
0000de  b911              CBNZ     r1,|L1.230|
0000e0  2000              MOVS     r0,#0
                  |L1.226|
0000e2  bc30              POP      {r4,r5}
0000e4  4770              BX       lr
                  |L1.230|
0000e6  2001              MOVS     r0,#1
0000e8  4413              ADD      r3,r3,r2
0000ea  4411              ADD      r1,r1,r2
0000ec  f003f003          AND      r12,r3,#3
0000f0  f001f001          AND      r4,r1,#3
0000f4  45a4              CMP      r12,r4
0000f6  d101              BNE      |L1.252|
0000f8  2401              MOVS     r4,#1
0000fa  e000              B        |L1.254|
                  |L1.252|
0000fc  2400              MOVS     r4,#0
                  |L1.254|
0000fe  2c01              CMP      r4,#1
000100  d12d              BNE      |L1.350|
000102  f1bcf1bc          CMP      r12,#0
000106  d012              BEQ      |L1.302|
000108  e00b              B        |L1.290|
                  |L1.266|
00010a  1e5b              SUBS     r3,r3,#1
00010c  1e49              SUBS     r1,r1,#1
00010e  781c              LDRB     r4,[r3,#0]
000110  780d              LDRB     r5,[r1,#0]
000112  42ac              CMP      r4,r5
000114  d000              BEQ      |L1.280|
000116  2000              MOVS     r0,#0
                  |L1.280|
000118  1e52              SUBS     r2,r2,#1
00011a  f1acf1ac          SUB      r12,r12,#1
00011e  f00cf00c          AND      r12,r12,#0xff
                  |L1.290|
000122  2801              CMP      r0,#1
000124  d103              BNE      |L1.302|
000126  b112              CBZ      r2,|L1.302|
000128  f1bcf1bc          CMP      r12,#0
00012c  d1ed              BNE      |L1.266|
                  |L1.302|
00012e  2801              CMP      r0,#1
000130  d115              BNE      |L1.350|
000132  e007              B        |L1.324|
                  |L1.308|
000134  1f09              SUBS     r1,r1,#4
000136  f853f853          LDR      r12,[r3,#-4]!
00013a  680c              LDR      r4,[r1,#0]
00013c  45a4              CMP      r12,r4
00013e  d000              BEQ      |L1.322|
000140  2000              MOVS     r0,#0
                  |L1.322|
000142  1f12              SUBS     r2,r2,#4
                  |L1.324|
000144  2801              CMP      r0,#1
000146  d10a              BNE      |L1.350|
000148  2a04              CMP      r2,#4
00014a  d2f3              BCS      |L1.308|
00014c  e007              B        |L1.350|
                  |L1.334|
00014e  1e49              SUBS     r1,r1,#1
000150  f813f813          LDRB     r12,[r3,#-1]!
000154  780c              LDRB     r4,[r1,#0]
000156  45a4              CMP      r12,r4
000158  d000              BEQ      |L1.348|
00015a  2000              MOVS     r0,#0
                  |L1.348|
00015c  1e52              SUBS     r2,r2,#1
                  |L1.350|
00015e  2801              CMP      r0,#1
000160  d1bf              BNE      |L1.226|
000162  2a00              CMP      r2,#0
000164  d1f3              BNE      |L1.334|
000166  bc30              POP      {r4,r5}
000168  4770              BX       lr
;;;462    
                          ENDP

⌨️ 快捷键说明

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