📄 lib_mem.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 + -