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

📄 lib_mem.txt

📁 stm32 ucos 精简移殖版本 不需作任何修改直接便可运行。包含串口 定时器
💻 TXT
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 919] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\output\lib_mem.o --depend=.\output\lib_mem.d --device=DARMSTM --apcs=interwork -O1 -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\arm-cortex-m3\Generic\RealView -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\CPU\ST\STM32\inc -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\Arm-Cortex-M3\RealView -I..\..\..\..\..\uC-LIB -IC:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\output\lib_mem.crf ..\..\..\..\..\uC-LIB\lib_mem.c]
                          THUMB

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

                  Mem_Init PROC
;;;182    #endif
;;;183    }
000000  4770              BX       lr
;;;184    
                          ENDP

                  Mem_Set PROC
;;;255                   CPU_SIZE_T   size)
;;;256    {
000002  b510              PUSH     {r4,lr}
;;;257        CPU_SIZE_T   size_rem;
;;;258        CPU_ALIGN    data_align;
;;;259        CPU_ALIGN   *pmem_align;
;;;260        CPU_INT08U  *pmem_08;
;;;261        CPU_INT08U   mem_align_modulo;
;;;262        CPU_INT08U   i;
;;;263    
;;;264    
;;;265        if (size < 1) {                                             /* See Note #1.                                         */
000004  2a00              CMP      r2,#0
000006  d020              BEQ      |L1.74|
;;;266            return;
;;;267        }
;;;268        if (pmem == (void *)0) {
000008  2800              CMP      r0,#0
00000a  d01e              BEQ      |L1.74|
;;;269            return;
;;;270        }
;;;271    
;;;272    
;;;273        data_align = 0;
00000c  2300              MOVS     r3,#0
;;;274        for (i = 0; i < sizeof(CPU_ALIGN); i++) {                   /* Fill each data_align octet with data val.            */
00000e  2400              MOVS     r4,#0
                  |L1.16|
;;;275            data_align <<=  DEF_OCTET_NBR_BITS;
000010  021b              LSLS     r3,r3,#8
;;;276            data_align  |= (CPU_ALIGN)data_val;
000012  430b              ORRS     r3,r3,r1
000014  1c64              ADDS     r4,r4,#1              ;274
000016  b2e4              UXTB     r4,r4                 ;274
000018  2c04              CMP      r4,#4                 ;274
00001a  d3f9              BCC      |L1.16|
;;;277        }
;;;278    
;;;279        size_rem         = (CPU_SIZE_T)size;
;;;280        mem_align_modulo = (CPU_INT08U)((CPU_ADDR)pmem % sizeof(CPU_ALIGN));    /* See Note #3.                             */
00001c  f000f000          AND      r4,r0,#3
;;;281    
;;;282        pmem_08 = (CPU_INT08U *)pmem;
;;;283        if (mem_align_modulo != 0) {                                /* If leading octets avail,                   ...       */
000020  b15c              CBZ      r4,|L1.58|
000022  e004              B        |L1.46|
                  |L1.36|
;;;284            i = mem_align_modulo;
;;;285            while ((size_rem > 0) &&                                /* ... start mem buf fill with leading octets ...       */
;;;286                   (i        < sizeof(CPU_ALIGN ))) {               /* ... until next CPU_ALIGN word boundary.              */
;;;287               *pmem_08++ = data_val;
000024  f800f800          STRB     r1,[r0],#1
;;;288                size_rem -= sizeof(CPU_INT08U);
000028  1e52              SUBS     r2,r2,#1
;;;289                i++;
00002a  1c64              ADDS     r4,r4,#1
00002c  b2e4              UXTB     r4,r4
                  |L1.46|
00002e  b122              CBZ      r2,|L1.58|
000030  2c04              CMP      r4,#4                 ;286
000032  d3f7              BCC      |L1.36|
000034  e001              B        |L1.58|
                  |L1.54|
;;;290            }
;;;291        }
;;;292    
;;;293        pmem_align = (CPU_ALIGN *)pmem_08;                          /* See Note #2a.                                        */
;;;294        while (size_rem >= sizeof(CPU_ALIGN)) {                     /* While mem buf aligned on CPU_ALIGN word boundaries,  */
;;;295           *pmem_align++ = data_align;                              /* ... fill mem buf with    CPU_ALIGN-sized data.       */
000036  c008              STM      r0!,{r3}
;;;296            size_rem    -= sizeof(CPU_ALIGN);
000038  1f12              SUBS     r2,r2,#4
                  |L1.58|
00003a  2a04              CMP      r2,#4                 ;294
00003c  d2fb              BCS      |L1.54|
00003e  e002              B        |L1.70|
                  |L1.64|
;;;297        }
;;;298    
;;;299        pmem_08 = (CPU_INT08U *)pmem_align;
;;;300        while (size_rem > 0) {                                      /* Finish mem buf fill with trailing octets.            */
;;;301           *pmem_08++   = data_val;
000040  f800f800          STRB     r1,[r0],#1
;;;302            size_rem   -= sizeof(CPU_INT08U);
000044  1e52              SUBS     r2,r2,#1
                  |L1.70|
000046  2a00              CMP      r2,#0                 ;300
000048  d1fa              BNE      |L1.64|
                  |L1.74|
;;;303        }
;;;304    }
00004a  bd10              POP      {r4,pc}
;;;305    
                          ENDP

                  Mem_Clr PROC
;;;211    {
;;;212        Mem_Set((void     *)pmem,
00004c  460a              MOV      r2,r1
00004e  2100              MOVS     r1,#0
000050  e7fe              B        Mem_Set
;;;213                (CPU_INT08U)0,                                      /* See Note #2.                                         */
;;;214                (CPU_SIZE_T)size);
;;;215    }
;;;216    
                          ENDP

                  Mem_Cmp PROC
;;;459                          CPU_SIZE_T   size)
;;;460    {
000052  b570              PUSH     {r4-r6,lr}
000054  4603              MOV      r3,r0
;;;461        CPU_SIZE_T    size_rem;
;;;462        CPU_ALIGN    *p1_mem_align;
;;;463        CPU_ALIGN    *p2_mem_align;
;;;464        CPU_INT08U   *p1_mem_08;
;;;465        CPU_INT08U   *p2_mem_08;
;;;466        CPU_INT08U    i;
;;;467        CPU_INT08U    mem_align_modulo_1;
;;;468        CPU_INT08U    mem_align_modulo_2;
;;;469        CPU_BOOLEAN   mem_aligned;
;;;470        CPU_BOOLEAN   mem_cmp;
;;;471    
;;;472    
;;;473        if (size < 1) {                                             /* See Note #1.                                         */
000056  b90a              CBNZ     r2,|L1.92|
;;;474            return (DEF_YES);
000058  2001              MOVS     r0,#1
;;;475        }
;;;476        if (p1_mem == (void *)0) {
;;;477            return (DEF_NO);
;;;478        }
;;;479        if (p2_mem == (void *)0) {
;;;480            return (DEF_NO);
;;;481        }
;;;482    
;;;483    
;;;484        mem_cmp            =  DEF_YES;                              /* Assume mem bufs are identical until cmp fails.       */
;;;485        size_rem           =  size;
;;;486                                                                    /* Start @ end of mem bufs (see Note #2).               */
;;;487        p1_mem_08          = (CPU_INT08U *)p1_mem + size;
;;;488        p2_mem_08          = (CPU_INT08U *)p2_mem + size;
;;;489                                                                    /* See Note #4.                                         */
;;;490        mem_align_modulo_1 = (CPU_INT08U  )((CPU_ADDR)p1_mem_08 % sizeof(CPU_ALIGN));
;;;491        mem_align_modulo_2 = (CPU_INT08U  )((CPU_ADDR)p2_mem_08 % sizeof(CPU_ALIGN));
;;;492    
;;;493        mem_aligned        = (mem_align_modulo_1 == mem_align_modulo_2) ? DEF_YES : DEF_NO;
;;;494    
;;;495        if (mem_aligned == DEF_YES) {                               /* If mem bufs' alignment offset equal, ...             */
;;;496                                                                    /* ... optimize cmp for mem buf alignment.              */
;;;497            if (mem_align_modulo_1 != 0) {                          /* If trailing octets avail,                  ...       */
;;;498                i = mem_align_modulo_1;
;;;499                while ((mem_cmp == DEF_YES) &&                      /* ... cmp mem bufs while identical &         ...       */
;;;500                       (size_rem > 0)       &&                      /* ... start mem buf cmp with trailing octets ...       */
;;;501                       (i        > 0)) {                            /* ... until next CPU_ALIGN word boundary.              */
;;;502                    p1_mem_08--;
;;;503                    p2_mem_08--;
;;;504                    if (*p1_mem_08 != *p2_mem_08) {                 /* If ANY data octet(s) NOT identical, cmp fails.       */
;;;505                         mem_cmp = DEF_NO;
;;;506                    }
;;;507                    size_rem -= sizeof(CPU_INT08U);
;;;508                    i--;
;;;509                }
;;;510            }
;;;511    
;;;512            if (mem_cmp == DEF_YES) {                               /* If cmp still identical, cmp aligned mem bufs.        */
;;;513                p1_mem_align = (CPU_ALIGN *)p1_mem_08;              /* See Note #3a.                                        */
;;;514                p2_mem_align = (CPU_ALIGN *)p2_mem_08;
;;;515    
;;;516                while ((mem_cmp  == DEF_YES) &&                     /* Cmp mem bufs while identical & ...                   */
;;;517                       (size_rem >= sizeof(CPU_ALIGN))) {           /* ... mem bufs aligned on CPU_ALIGN word boundaries.   */
;;;518                    p1_mem_align--;
;;;519                    p2_mem_align--;
;;;520                    if (*p1_mem_align != *p2_mem_align) {           /* If ANY data octet(s) NOT identical, cmp fails.       */
;;;521                         mem_cmp = DEF_NO;
;;;522                    }
;;;523                    size_rem -= sizeof(CPU_ALIGN);
;;;524                }
;;;525    
;;;526                p1_mem_08 = (CPU_INT08U *)p1_mem_align;
;;;527                p2_mem_08 = (CPU_INT08U *)p2_mem_align;
;;;528            }
;;;529        }
;;;530    
;;;531        while ((mem_cmp == DEF_YES) &&                              /* Cmp mem bufs while identical ...                     */
;;;532               (size_rem > 0)) {                                    /* ... for unaligned mem bufs or trailing octets.       */
;;;533            p1_mem_08--;
;;;534            p2_mem_08--;
;;;535            if (*p1_mem_08 != *p2_mem_08) {                         /* If ANY data octet(s) NOT identical, cmp fails.       */
;;;536                 mem_cmp = DEF_NO;
;;;537            }
;;;538            size_rem -= sizeof(CPU_INT08U);
;;;539        }
;;;540    
;;;541        return (mem_cmp);
;;;542    }
00005a  bd70              POP      {r4-r6,pc}
                  |L1.92|
00005c  b90b              CBNZ     r3,|L1.98|
00005e  2000              MOVS     r0,#0                 ;477
000060  bd70              POP      {r4-r6,pc}
                  |L1.98|
000062  b909              CBNZ     r1,|L1.104|
000064  2000              MOVS     r0,#0                 ;480
                  |L1.102|
000066  bd70              POP      {r4-r6,pc}
                  |L1.104|
000068  2001              MOVS     r0,#1                 ;484
00006a  4413              ADD      r3,r3,r2              ;487
00006c  4411              ADD      r1,r1,r2              ;488
00006e  f003f003          AND      r4,r3,#3              ;490
000072  f001f001          AND      r6,r1,#3              ;491
000076  2501              MOVS     r5,#1                 ;493
000078  42b4              CMP      r4,r6                 ;493
00007a  d000              BEQ      |L1.126|
00007c  2500              MOVS     r5,#0                 ;493
                  |L1.126|
00007e  2d01              CMP      r5,#1                 ;495
000080  d128              BNE      |L1.212|
000082  b17c              CBZ      r4,|L1.164|
000084  e009              B        |L1.154|
                  |L1.134|
000086  1e5b              SUBS     r3,r3,#1              ;502
000088  1e49              SUBS     r1,r1,#1              ;503
00008a  781d              LDRB     r5,[r3,#0]            ;504
00008c  780e              LDRB     r6,[r1,#0]            ;504
00008e  42b5              CMP      r5,r6                 ;504
000090  d000              BEQ      |L1.148|
000092  2000              MOVS     r0,#0                 ;505
                  |L1.148|
000094  1e52              SUBS     r2,r2,#1              ;507
000096  1e64              SUBS     r4,r4,#1              ;508
000098  b2e4              UXTB     r4,r4                 ;508
                  |L1.154|
00009a  2801              CMP      r0,#1                 ;499
00009c  d102              BNE      |L1.164|
00009e  b10a              CBZ      r2,|L1.164|
0000a0  2c00              CMP      r4,#0                 ;501
0000a2  d1f0              BNE      |L1.134|
                  |L1.164|
0000a4  2801              CMP      r0,#1                 ;512
0000a6  d115              BNE      |L1.212|
0000a8  e007              B        |L1.186|
                  |L1.170|
0000aa  1f1b              SUBS     r3,r3,#4              ;518
0000ac  1f09              SUBS     r1,r1,#4              ;519
0000ae  681c              LDR      r4,[r3,#0]            ;520
0000b0  680d              LDR      r5,[r1,#0]            ;520
0000b2  42ac              CMP      r4,r5                 ;520
0000b4  d000              BEQ      |L1.184|
0000b6  2000              MOVS     r0,#0                 ;521
                  |L1.184|
0000b8  1f12              SUBS     r2,r2,#4              ;523
                  |L1.186|
0000ba  2801              CMP      r0,#1                 ;516
0000bc  d10a              BNE      |L1.212|
0000be  2a04              CMP      r2,#4                 ;517
0000c0  d2f3              BCS      |L1.170|
0000c2  e007              B        |L1.212|
                  |L1.196|
0000c4  1e5b              SUBS     r3,r3,#1              ;533
0000c6  1e49              SUBS     r1,r1,#1              ;534
0000c8  781c              LDRB     r4,[r3,#0]            ;535
0000ca  780d              LDRB     r5,[r1,#0]            ;535
0000cc  42ac              CMP      r4,r5                 ;535
0000ce  d000              BEQ      |L1.210|
0000d0  2000              MOVS     r0,#0                 ;536
                  |L1.210|
0000d2  1e52              SUBS     r2,r2,#1              ;538
                  |L1.212|
0000d4  2801              CMP      r0,#1                 ;531
0000d6  d1c6              BNE      |L1.102|
0000d8  2a00              CMP      r2,#0                 ;532
0000da  d1f3              BNE      |L1.196|
0000dc  bd70              POP      {r4-r6,pc}
;;;543    
                          ENDP

⌨️ 快捷键说明

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