############################################################################### # # IAR ELF Linker V8.32.1.169/W32 for ARM 23/Mar/2026 15:04:51 # Copyright 2007-2018 IAR Systems AB. # # Output file C:\Users\13232\Desktop\代码练习\iar\Debug\Exe\iar.out # Map file C:\Users\13232\Desktop\代码练习\iar\Debug\List\iar.map # Command line # -f C:\Users\13232\AppData\Local\Temp\EW4C13.tmp # (C:\Users\13232\Desktop\代码练习\iar\Debug\Obj\main.o # C:\Users\13232\Desktop\代码练习\iar\Debug\Obj\test.o # --no_out_extension -o # C:\Users\13232\Desktop\代码练习\iar\Debug\Exe\iar.out --redirect # _Printf_PrintfFullNoMb --redirect _Scanf_ScanfFullNoMb --map # C:\Users\13232\Desktop\代码练习\iar\Debug\List\iar.map --log # unused_fragments,call_graph --log_file # C:\Users\13232\Desktop\代码练习\iar\Debug\List\iar.log --config # F:\anzhuangbao\IAR\IAR Systems\Embedded Workbench # 8.2\arm\CONFIG\generic_cortex.icf --semihosting --entry # __iar_program_start --vfe --text_out locale) # ############################################################################### ******************************************************************************* *** RUNTIME MODEL ATTRIBUTES *** CppFlavor * __SystemLibrary DLib __dlib_version 6 ******************************************************************************* *** HEAP SELECTION *** The basic heap was selected because no calls to memory allocation functions were found in the application outside of system library functions, and there are calls to deallocation functions in the application. ******************************************************************************* *** PLACEMENT SUMMARY *** A0: place at 0x0 { ro section .intvec }; P1: place in [from 0x0 to 0x7ffff] { ro }; define block CSTACK with size 1K, alignment 8 { }; define block PROC_STACK with size 0M, alignment 8 { }; define block HEAP with size 2K, alignment 8 { }; P2: place in [from 0x20000000 to 0x2000ffff] { rw, block CSTACK, block PROC_STACK, block HEAP }; initialize by copy { rw }; Section Kind Address Size Object ------- ---- ------- ---- ------ A0: 0x40 .intvec ro code 0x0 0x40 vector_table_M.o [4] - 0x40 0x40 P1: 0x1dd8 .text ro code 0x40 0xdf2 xprintffull_nomb.o [2] .text ro code 0xe32 0x2 vector_table_M.o [4] .text ro code 0xe34 0x16 strchr.o [4] .text ro code 0xe4c 0x40 xfail_s.o [2] .text ro code 0xe8c 0x36 strlen.o [4] .text ro code 0xec4 0x58 memchr.o [4] .text ro code 0xf1c 0x230 I64DivMod.o [4] .text ro code 0x114c 0x1a2 DblMul.o [3] .text ro code 0x12f0 0x76 ABImemcpy_unaligned.o [4] .text ro code 0x1368 0x70 frexp.o [3] .text ro code 0x13d8 0x2e DblCmpLe.o [3] .text ro code 0x1408 0x2e DblCmpGe.o [3] .text ro code 0x1438 0x13a ldexp.o [3] .text ro code 0x1574 0x3a DblToS32.o [3] .text ro code 0x15b0 0x22 S32ToDbl.o [3] .text ro code 0x15d4 0xe2 DblSub.o [3] .text ro code 0x16b8 0x246 DblDiv.o [3] .text ro code 0x1900 0x28 DblToU32.o [3] .text ro code 0x1928 0x1a U32ToDbl.o [3] .text ro code 0x1942 0x6 abort.o [2] .text ro code 0x1948 0x2 I64DivZer.o [4] .text ro code 0x194c 0x16a DblAdd.o [3] .text ro code 0x1ab8 0x14 exit.o [5] .text ro code 0x1acc 0x80 iarttio.o [5] .text ro code 0x1b4c 0x3c XShttio.o [2] .text ro code 0x1b88 0x50 test.o [1] .text ro code 0x1bd8 0x28 printf.o [2] .text ro code 0x1c00 0x46 main.o [1] .text ro code 0x1c46 0x38 packbits_init_single.o [4] .text ro code 0x1c80 0x28 data_init.o [4] .text ro code 0x1ca8 0x22 iarwrite.o [5] .iar.init_table const 0x1ccc 0x10 - Linker created - .text ro code 0x1cdc 0x20 putchar.o [2] .text ro code 0x1cfc 0x10 write.o [5] .text ro code 0x1d0c 0x1e dwrite.o [5] .text ro code 0x1d2a 0x20 iarwstd.o [5] .text ro code 0x1d4c 0x1e cmain.o [4] .text ro code 0x1d6a 0x4 low_level_init.o [2] .text ro code 0x1d6e 0x4 exit.o [2] .text ro code 0x1d74 0xa cexit.o [4] .rodata const 0x1d80 0x1c test.o [1] .rodata const 0x1d9c 0x1c test.o [1] .rodata const 0x1db8 0x18 test.o [1] .text ro code 0x1dd0 0x16 xprout.o [2] .rodata const 0x1de8 0x10 test.o [1] .rodata const 0x1df8 0x10 test.o [1] .text ro code 0x1e08 0xc cstartup_M.o [4] .rodata const 0x1e14 0x0 packbits_init_single.o [4] Initializer bytes const 0x1e14 0x4 for P2-1 - 0x1e18 0x1dd8 P2, part 1 of 2: 0xd P2-1 0x20000000 0xd Init block .data inited 0x20000000 0x8 XShttio.o [2] .bss inited 0x20000008 0x4 xfail_s.o [2] .bss inited 0x2000000c 0x1 XShttio.o [2] - 0x2000000d 0xd P2, part 2 of 2: 0x400 CSTACK 0x20000010 0x400 Block CSTACK uninit 0x20000010 0x400 Block tail - 0x20000410 0x400 Unused ranges: From To Size ---- -- ---- 0x1e18 0x7ffff 0x7e1e8 0x2000000d 0x2000000f 0x3 0x20000410 0x2000ffff 0xfbf0 ******************************************************************************* *** INIT TABLE *** Address Size ------- ---- Copy/packbits (__iar_packbits_init_single3) 1 source range, total size 0x4 (30% of destination): 0x1e14 0x4 1 destination range, total size 0xd: 0x20000000 0xd ******************************************************************************* *** MODULE SUMMARY *** Module ro code ro data rw data ------ ------- ------- ------- command line/config: ------------------------------------------------- Total: C:\Users\13232\Desktop\代码练习\iar\Debug\Obj: [1] main.o 70 test.o 80 112 ------------------------------------------------- Total: 150 112 dl7M_tln.a: [2] XShttio.o 60 3 9 abort.o 6 exit.o 4 low_level_init.o 4 printf.o 40 putchar.o 32 xfail_s.o 64 1 4 xprintffull_nomb.o 3 570 xprout.o 22 ------------------------------------------------- Total: 3 802 4 13 m7M_tl.a: [3] DblAdd.o 362 DblCmpGe.o 46 DblCmpLe.o 46 DblDiv.o 582 DblMul.o 418 DblSub.o 226 DblToS32.o 58 DblToU32.o 40 S32ToDbl.o 34 U32ToDbl.o 26 frexp.o 112 ldexp.o 314 ------------------------------------------------- Total: 2 264 rt7M_tl.a: [4] ABImemcpy_unaligned.o 118 I64DivMod.o 560 I64DivZer.o 2 cexit.o 10 cmain.o 30 cstartup_M.o 12 data_init.o 40 memchr.o 88 packbits_init_single.o 56 strchr.o 22 strlen.o 54 vector_table_M.o 66 ------------------------------------------------- Total: 1 058 shb_l.a: [5] dwrite.o 30 exit.o 20 iarttio.o 128 iarwrite.o 34 iarwstd.o 32 write.o 16 ------------------------------------------------- Total: 260 Gaps 32 6 Linker created 16 1 024 ----------------------------------------------------- Grand Total: 7 566 138 1 037 ******************************************************************************* *** ENTRY LIST *** Entry Address Size Type Object ----- ------- ---- ---- ------ .iar.init_table$$Base 0x1ccc -- Gb - Linker created - .iar.init_table$$Limit 0x1cdc -- Gb - Linker created - ?main 0x1d4d Code Gb cmain.o [4] CSTACK$$Base 0x20000010 -- Gb - Linker created - CSTACK$$Limit 0x20000410 -- Gb - Linker created - Delay_ms 0x1c01 0x1a Code Gb main.o [1] LoadInt 0x1ef 0x7a Code Lc xprintffull_nomb.o [2] Region$$Table$$Base 0x1ccc -- Gb - Linker created - Region$$Table$$Limit 0x1cdc -- Gb - Linker created - Test_CalcAdd 0x1b99 0x14 Code Gb test.o [1] Test_PrintInfo 0x1b89 0x10 Code Gb test.o [1] Test_SetLedStatus 0x1bad 0x18 Code Gb test.o [1] _GenldFullNoMb 0xb31 0x274 Code Lc xprintffull_nomb.o [2] _LdtobFullNoMb 0x72d 0x3d6 Code Lc xprintffull_nomb.o [2] _LitobFullNoMb 0x5dd 0x10a Code Lc xprintffull_nomb.o [2] _PrintfFullNoMb 0x41 0x19e Code Gb xprintffull_nomb.o [2] _Prout 0x1dd1 0x16 Code Gb xprout.o [2] _PutcharsFullNoMb 0xda5 0x2e Code Lc xprintffull_nomb.o [2] _PutfldFullNoMb 0x269 0x268 Code Lc xprintffull_nomb.o [2] _PuttxtFullNoMb 0x4d1 0x10c Code Lc xprintffull_nomb.o [2] __aeabi_cdcmple 0x13d9 Code Gb DblCmpLe.o [3] __aeabi_cdrcmple 0x1409 Code Gb DblCmpGe.o [3] __aeabi_d2iz 0x1575 Code Gb DblToS32.o [3] __aeabi_d2uiz 0x1901 Code Gb DblToU32.o [3] __aeabi_ddiv 0x16b9 Code Gb DblDiv.o [3] __aeabi_dmul 0x114d Code Gb DblMul.o [3] __aeabi_dsub 0x15d5 Code Gb DblSub.o [3] __aeabi_i2d 0x15b1 Code Gb S32ToDbl.o [3] __aeabi_ldiv0 0x1949 Code Gb I64DivZer.o [4] __aeabi_ui2d 0x1929 Code Gb U32ToDbl.o [3] __aeabi_uldivmod 0xf1d Code Gb I64DivMod.o [4] __cmain 0x1d4d Code Gb cmain.o [4] __dwrite 0x1d0d 0x1e Code Gb dwrite.o [5] __exit 0x1ab9 0x14 Code Gb exit.o [5] __iar_Fail_s 0xe4d 0x1c Code Gb xfail_s.o [2] __iar_Memchr 0xec5 Code Gb memchr.o [4] __iar_Strchr 0xe35 Code Gb strchr.o [4] __iar_close_ttio 0x1acd 0x2e Code Gb iarttio.o [5] __iar_dadd 0x15e5 Code Gb DblSub.o [3] __iar_data_init3 0x1c81 0x28 Code Gb data_init.o [4] __iar_dsub 0x194d Code Gb DblAdd.o [3] __iar_dsubStart 0x195f Code Gb DblAdd.o [3] __iar_frexp 0x1375 Code Gb frexp.o [3] __iar_frexp64 0x1369 Code Gb frexp.o [3] __iar_frexpl 0x1375 Code Gb frexp.o [3] __iar_get_ttio 0x1afd 0x4c Code Gb iarttio.o [5] __iar_ldexp64 0x1439 Code Gb ldexp.o [3] __iar_lookup_ttioh 0x1b7b 0x4 Code Gb XShttio.o [2] __iar_packbits_init_single3 0x1c47 0x38 Code Gb packbits_init_single.o [4] __iar_program_start 0x1e09 Code Gb cstartup_M.o [4] __iar_scalbln64 0x1439 Code Gb ldexp.o [3] __iar_scalbn64 0x1439 Code Gb ldexp.o [3] __iar_sh_stdout 0x1d2b 0x20 Code Gb iarwstd.o [5] __iar_sh_write 0x1ca9 0x22 Code Gb iarwrite.o [5] __iar_ttio_guard_lock 0x1b4d 0x1e Code Gb XShttio.o [2] __iar_ttio_guard_unlock 0x1b6b 0x10 Code Gb XShttio.o [2] __iar_ttio_handles 0x20000000 0x8 Data Lc XShttio.o [2] __iar_unaligned_memcpy 0x12f1 Code Gb ABImemcpy_unaligned.o [4] __iar_unaligned_memcpy4 0x1311 Code Gb ABImemcpy_unaligned.o [4] __iar_unaligned_memcpy8 0x1311 Code Gb ABImemcpy_unaligned.o [4] __low_level_init 0x1d6b 0x4 Code Gb low_level_init.o [2] __vector_table 0x0 Data Gb vector_table_M.o [4] __write 0x1cfd 0x10 Code Gb write.o [5] _call_main 0x1d59 Code Gb cmain.o [4] _exit 0x1d75 Code Gb cexit.o [4] _main 0x1d67 Code Gb cmain.o [4] abort 0x1943 0x6 Code Gb abort.o [2] exit 0x1d6f 0x4 Code Gb exit.o [2] frexp 0x1369 Code Gb frexp.o [3] frexpl 0x1369 Code Gb frexp.o [3] ldexp 0x1439 Code Gb ldexp.o [3] ldexpl 0x1439 Code Gb ldexp.o [3] main 0x1c1b 0x2c Code Gb main.o [1] memchr 0xec5 Code Gb memchr.o [4] printf 0x1bd9 0x28 Code Gb printf.o [2] putchar 0x1cdd 0x20 Code Gb putchar.o [2] scalbln 0x1439 Code Gb ldexp.o [3] scalblnl 0x1439 Code Gb ldexp.o [3] scalbn 0x1439 Code Gb ldexp.o [3] scalbnl 0x1439 Code Gb ldexp.o [3] scale 0x6e7 0x46 Code Lc xprintffull_nomb.o [2] sec_hand 0x20000008 0x4 Data Lc xfail_s.o [2] strchr 0xe35 Code Gb strchr.o [4] strlen 0xe8d Code Gb strlen.o [4] ttio_guard 0x2000000c 0x1 Data Lc XShttio.o [2] [1] C:\Users\13232\Desktop\代码练习\iar\Debug\Obj [2] dl7M_tln.a [3] m7M_tl.a [4] rt7M_tl.a [5] shb_l.a 7 566 bytes of readonly code memory 138 bytes of readonly data memory 1 037 bytes of readwrite data memory Errors: none Warnings: none这份文件是IAR ARM 链接器生成的链接映射文件Map File它详细记录了程序编译链接后代码、数据在芯片存储中的分配情况。我会按文件的逻辑区块逐段解释核心内容因内容过长聚焦关键行而非逐行逐字节一、头部信息区# IAR ELF Linker V8.32.1.169/W32 for ARM 23/Mar/2026 15:04:51 # Copyright 2007-2018 IAR Systems AB. # # Output file C:\Users\13232\Desktop\代码练习\iar\Debug\Exe\iar.out # Map file C:\Users\13232\Desktop\代码练习\iar\Debug\List\iar.map # Command line # -f C:\Users\13232\AppData\Local\Temp\EW4C13.tmp # (C:\Users\13232\Desktop\代码练习\iar\Debug\Obj\main.o # C:\Users\13232\Desktop\代码练习\iar\Debug\Obj\test.o # --no_out_extension -o # C:\Users\13232\Desktop\代码练习\iar\Debug\Exe\iar.out --redirect # _Printf_PrintfFullNoMb --redirect _Scanf_ScanfFullNoMb --map # C:\Users\13232\Desktop\代码练习\iar\Debug\List\iar.map --log # unused_fragments,call_graph --log_file # C:\Users\13232\Desktop\代码练习\iar\Debug\List\iar.log --config # F:\anzhuangbao\IAR\IAR Systems\Embedded Workbench # 8.2\arm\CONFIG\generic_cortex.icf --semihosting --entry # __iar_program_start --vfe --text_out locale)第一行链接器版本IAR ELF Linker V8.32.1、运行环境W3232 位 Windows、目标架构ARM以及链接时间2026-03-23 15:04:51。CopyrightIAR 版权声明。Output file链接输出的可执行文件路径iar.out是 IAR 的目标文件格式。Map file当前这份映射文件的保存路径。Command line链接器执行时的命令行参数main.o/test.o参与链接的目标文件你的业务代码编译后的文件。--redirect _Printf_PrintfFullNoMb重定向 printf 函数到_PrintfFullNoMb无多字节支持的完整版 printf。--config generic_cortex.icf指定链接配置文件ICF 文件定义芯片的内存布局如 Flash/RAM 地址范围。--semihosting启用半主机模式通过调试器实现 PC 和开发板的输入输出交互。--entry __iar_program_start程序入口点IAR 的启动函数而非直接是 main。二、运行时模型属性RUNTIME MODEL ATTRIBUTES*** RUNTIME MODEL ATTRIBUTES *** CppFlavor * __SystemLibrary DLib __dlib_version 6CppFlavor *未启用 C 特性* 表示通用。__SystemLibrary DLib使用 IAR 的 DLib 运行时库提供 printf/strlen 等基础函数。__dlib_version 6DLib 库版本为 6。三、堆选择HEAP SELECTION*** HEAP SELECTION *** The basic heap was selected because no calls to memory allocation functions were found in the application outside of system library functions, and there are calls to deallocation functions in the application.链接器自动选择了基础堆原因是你的代码中没有直接调用 malloc/free 等内存分配函数仅系统库内部使用但存在释放函数调用因此启用最小化堆配置。四、内存布局分配PLACEMENT SUMMARY这是映射文件的核心记录代码 / 数据在 Flash0x0~0x7ffff和 RAM0x20000000~0x2000ffff中的具体地址。A0: place at 0x0 { ro section .intvec }; // A0段强制放在0x0地址存放中断向量表.intvec P1: place in [from 0x0 to 0x7ffff] { ro }; // P1段Flash区域0x0~0x7FFFF存放只读ro数据/代码 define block CSTACK with size 1K, alignment 8 { }; // 定义主栈CSTACK1KB大小8字节对齐 define block PROC_STACK with size 0M, alignment 8 { }; // 进程栈0大小未使用 define block HEAP with size 2K, alignment 8 { }; // 堆2KB大小 P2: place in [from 0x20000000 to 0x2000ffff] { rw, block CSTACK, block PROC_STACK, block HEAP }; // P2段RAM区域存放读写rw数据、栈、堆 initialize by copy { rw }; // 读写数据rw从Flash复制到RAM嵌入式系统标准操作子段详细分配重点行解释A0: 0x40 .intvec ro code 0x0 0x40 vector_table_M.o [4] // 中断向量表从0x0开始占用0x40字节64字节来自vector_table_M.o - 0x40 0x40 // A0段总大小0x40 P1: 0x1dd8 .text ro code 0x40 0xdf2 xprintffull_nomb.o [2] // printf函数实现从0x40开始占用0xDF2字节3570字节 .text ro code 0xe32 0x2 vector_table_M.o [4] // 向量表相关代码0xE32地址2字节 .text ro code 0xe34 0x16 strchr.o [4] // strchr函数0xE34地址22字节 ... .text ro code 0x1b88 0x50 test.o [1] // 你的test.o代码0x1B88地址80字节 .text ro code 0x1c00 0x46 main.o [1] // 你的main.o代码0x1C00地址70字节 .rodata const 0x1d80 0x1c test.o [1] // test.o中的只读常量0x1D80地址28字节 ... - 0x1e18 0x1dd8 // P1段总大小0x1DD87640字节 P2, part 1 of 2: 0xd P2-1 0x20000000 0xd Init block // RAM初始化块从0x20000000开始9字节 .data inited 0x20000000 0x8 XShttio.o [2] // 已初始化数据8字节 .bss inited 0x20000008 0x4 xfail_s.o [2] // BSS段未初始化数据4字节 ... P2, part 2 of 2: 0x400 CSTACK 0x20000010 0x400 Block // 主栈从0x20000010开始0x400字节1KB CSTACK uninit 0x20000010 0x400 Block tail // 栈为未初始化数据未使用内存Unused rangesFrom To Size ---- -- ---- 0x1e18 0x7ffff 0x7e1e8 // Flash剩余空间约500KB 0x2000000d 0x2000000f 0x3 // RAM小间隙3字节 0x20000410 0x2000ffff 0xfbf0 // RAM剩余空间约64KB显示 Flash/RAM 中未被使用的地址范围可用于评估代码是否超出芯片内存容量。五、初始化表INIT TABLE*** INIT TABLE *** Address Size ------- ---- Copy/packbits (__iar_packbits_init_single3) 1 source range, total size 0x4 (30% of destination): 0x1e14 0x4 // Flash中的初始化数据源地址 1 destination range, total size 0xd: 0x20000000 0xd // RAM中的目标地址链接器记录了 “从 Flash 复制数据到 RAM” 的映射关系将 Flash 0x1E14 地址开始的 4 字节数据解压 / 复制到 RAM 0x20000000 开始的 13 字节区域packbits 是压缩存储优化。六、模块汇总MODULE SUMMARY按目标文件 / 库文件统计内存占用Module ro code ro data rw data ------ ------- ------- ------- C:\Users\13232\Desktop\代码练习\iar\Debug\Obj: [1] main.o 70 0 0 // main.o只读代码70字节无只读/读写数据 test.o 80 112 0 // test.o只读代码80字节只读数据112字节 ------------------------------------------------- Total: 150 112 0 // 你的业务代码总占用 dl7M_tln.a: [2] // DLib库printf/字符串函数等 XShttio.o 60 3 9 ... Total: 3 802 4 13 m7M_tl.a: [3] // 浮点运算库 Total: 2 264 0 0 rt7M_tl.a: [4] // 运行时库内存操作/启动代码等 Total: 1 058 0 0 shb_l.a: [5] // 半主机库调试输出相关 Total: 260 0 0 Gaps 32 6 0 // 内存间隙地址对齐导致的空闲 Linker created 16 1 024 // 链接器创建的段如栈 ----------------------------------------------------- Grand Total: 7 566 138 1 037 // 全局总计ro code只读代码Flash 中ro data只读数据Flash 中如常量rw data读写数据RAM 中如全局变量。七、符号入口列表ENTRY LIST记录所有全局符号函数 / 变量的地址和大小Entry Address Size Type Object ----- ------- ---- ---- ------ .iar.init_table$$Base 0x1ccc -- Gb - Linker created - // 初始化表起始地址 CSTACK$$Base 0x20000010 -- Gb - Linker created - // 栈起始地址 CSTACK$$Limit 0x20000410 -- Gb - Linker created - // 栈结束地址栈大小0x410-0x100x4001KB Delay_ms 0x1c01 0x1a Code Gb main.o [1] // Delay_ms函数地址0x1C01大小26字节 Test_CalcAdd 0x1b99 0x14 Code Gb test.o [1] // Test_CalcAdd函数地址0x1B99大小20字节 main 0x1c1b 0x2c Code Gb main.o [1] // main函数地址0x1C1B大小44字节 printf 0x1bd9 0x28 Code Gb printf.o [2] // printf函数地址0x1BD9大小40字节八、最终统计 结果7 566 bytes of readonly code memory // 只读代码总大小7566字节 138 bytes of readonly data memory // 只读数据总大小138字节 1 037 bytes of readwrite data memory // 读写数据总大小1037字节 Errors: none // 无链接错误 Warnings: none // 无链接警告总结这份映射文件核心是内存分配你的代码 / 库函数存放在 Flash0x0~0x7FFFF栈 / 堆 / 全局变量存放在 RAM0x20000000~0x2000FFFF符合 ARM Cortex-M 芯片的内存布局规则。关键资源占用业务代码main.otest.o仅占 Flash 262 字节大部分 Flash 占用来自 DLib 库printf / 浮点函数RAM 主要占用是 1KB 的栈CSTACK。链接结果正常无错误 / 警告代码未超出芯片 Flash/RAM 容量剩余大量空闲空间。
简单理解:IAR ARM 链接器 生成的链接映射文件(Map File)
发布时间:2026/6/13 21:16:24
############################################################################### # # IAR ELF Linker V8.32.1.169/W32 for ARM 23/Mar/2026 15:04:51 # Copyright 2007-2018 IAR Systems AB. # # Output file C:\Users\13232\Desktop\代码练习\iar\Debug\Exe\iar.out # Map file C:\Users\13232\Desktop\代码练习\iar\Debug\List\iar.map # Command line # -f C:\Users\13232\AppData\Local\Temp\EW4C13.tmp # (C:\Users\13232\Desktop\代码练习\iar\Debug\Obj\main.o # C:\Users\13232\Desktop\代码练习\iar\Debug\Obj\test.o # --no_out_extension -o # C:\Users\13232\Desktop\代码练习\iar\Debug\Exe\iar.out --redirect # _Printf_PrintfFullNoMb --redirect _Scanf_ScanfFullNoMb --map # C:\Users\13232\Desktop\代码练习\iar\Debug\List\iar.map --log # unused_fragments,call_graph --log_file # C:\Users\13232\Desktop\代码练习\iar\Debug\List\iar.log --config # F:\anzhuangbao\IAR\IAR Systems\Embedded Workbench # 8.2\arm\CONFIG\generic_cortex.icf --semihosting --entry # __iar_program_start --vfe --text_out locale) # ############################################################################### ******************************************************************************* *** RUNTIME MODEL ATTRIBUTES *** CppFlavor * __SystemLibrary DLib __dlib_version 6 ******************************************************************************* *** HEAP SELECTION *** The basic heap was selected because no calls to memory allocation functions were found in the application outside of system library functions, and there are calls to deallocation functions in the application. ******************************************************************************* *** PLACEMENT SUMMARY *** A0: place at 0x0 { ro section .intvec }; P1: place in [from 0x0 to 0x7ffff] { ro }; define block CSTACK with size 1K, alignment 8 { }; define block PROC_STACK with size 0M, alignment 8 { }; define block HEAP with size 2K, alignment 8 { }; P2: place in [from 0x20000000 to 0x2000ffff] { rw, block CSTACK, block PROC_STACK, block HEAP }; initialize by copy { rw }; Section Kind Address Size Object ------- ---- ------- ---- ------ A0: 0x40 .intvec ro code 0x0 0x40 vector_table_M.o [4] - 0x40 0x40 P1: 0x1dd8 .text ro code 0x40 0xdf2 xprintffull_nomb.o [2] .text ro code 0xe32 0x2 vector_table_M.o [4] .text ro code 0xe34 0x16 strchr.o [4] .text ro code 0xe4c 0x40 xfail_s.o [2] .text ro code 0xe8c 0x36 strlen.o [4] .text ro code 0xec4 0x58 memchr.o [4] .text ro code 0xf1c 0x230 I64DivMod.o [4] .text ro code 0x114c 0x1a2 DblMul.o [3] .text ro code 0x12f0 0x76 ABImemcpy_unaligned.o [4] .text ro code 0x1368 0x70 frexp.o [3] .text ro code 0x13d8 0x2e DblCmpLe.o [3] .text ro code 0x1408 0x2e DblCmpGe.o [3] .text ro code 0x1438 0x13a ldexp.o [3] .text ro code 0x1574 0x3a DblToS32.o [3] .text ro code 0x15b0 0x22 S32ToDbl.o [3] .text ro code 0x15d4 0xe2 DblSub.o [3] .text ro code 0x16b8 0x246 DblDiv.o [3] .text ro code 0x1900 0x28 DblToU32.o [3] .text ro code 0x1928 0x1a U32ToDbl.o [3] .text ro code 0x1942 0x6 abort.o [2] .text ro code 0x1948 0x2 I64DivZer.o [4] .text ro code 0x194c 0x16a DblAdd.o [3] .text ro code 0x1ab8 0x14 exit.o [5] .text ro code 0x1acc 0x80 iarttio.o [5] .text ro code 0x1b4c 0x3c XShttio.o [2] .text ro code 0x1b88 0x50 test.o [1] .text ro code 0x1bd8 0x28 printf.o [2] .text ro code 0x1c00 0x46 main.o [1] .text ro code 0x1c46 0x38 packbits_init_single.o [4] .text ro code 0x1c80 0x28 data_init.o [4] .text ro code 0x1ca8 0x22 iarwrite.o [5] .iar.init_table const 0x1ccc 0x10 - Linker created - .text ro code 0x1cdc 0x20 putchar.o [2] .text ro code 0x1cfc 0x10 write.o [5] .text ro code 0x1d0c 0x1e dwrite.o [5] .text ro code 0x1d2a 0x20 iarwstd.o [5] .text ro code 0x1d4c 0x1e cmain.o [4] .text ro code 0x1d6a 0x4 low_level_init.o [2] .text ro code 0x1d6e 0x4 exit.o [2] .text ro code 0x1d74 0xa cexit.o [4] .rodata const 0x1d80 0x1c test.o [1] .rodata const 0x1d9c 0x1c test.o [1] .rodata const 0x1db8 0x18 test.o [1] .text ro code 0x1dd0 0x16 xprout.o [2] .rodata const 0x1de8 0x10 test.o [1] .rodata const 0x1df8 0x10 test.o [1] .text ro code 0x1e08 0xc cstartup_M.o [4] .rodata const 0x1e14 0x0 packbits_init_single.o [4] Initializer bytes const 0x1e14 0x4 for P2-1 - 0x1e18 0x1dd8 P2, part 1 of 2: 0xd P2-1 0x20000000 0xd Init block .data inited 0x20000000 0x8 XShttio.o [2] .bss inited 0x20000008 0x4 xfail_s.o [2] .bss inited 0x2000000c 0x1 XShttio.o [2] - 0x2000000d 0xd P2, part 2 of 2: 0x400 CSTACK 0x20000010 0x400 Block CSTACK uninit 0x20000010 0x400 Block tail - 0x20000410 0x400 Unused ranges: From To Size ---- -- ---- 0x1e18 0x7ffff 0x7e1e8 0x2000000d 0x2000000f 0x3 0x20000410 0x2000ffff 0xfbf0 ******************************************************************************* *** INIT TABLE *** Address Size ------- ---- Copy/packbits (__iar_packbits_init_single3) 1 source range, total size 0x4 (30% of destination): 0x1e14 0x4 1 destination range, total size 0xd: 0x20000000 0xd ******************************************************************************* *** MODULE SUMMARY *** Module ro code ro data rw data ------ ------- ------- ------- command line/config: ------------------------------------------------- Total: C:\Users\13232\Desktop\代码练习\iar\Debug\Obj: [1] main.o 70 test.o 80 112 ------------------------------------------------- Total: 150 112 dl7M_tln.a: [2] XShttio.o 60 3 9 abort.o 6 exit.o 4 low_level_init.o 4 printf.o 40 putchar.o 32 xfail_s.o 64 1 4 xprintffull_nomb.o 3 570 xprout.o 22 ------------------------------------------------- Total: 3 802 4 13 m7M_tl.a: [3] DblAdd.o 362 DblCmpGe.o 46 DblCmpLe.o 46 DblDiv.o 582 DblMul.o 418 DblSub.o 226 DblToS32.o 58 DblToU32.o 40 S32ToDbl.o 34 U32ToDbl.o 26 frexp.o 112 ldexp.o 314 ------------------------------------------------- Total: 2 264 rt7M_tl.a: [4] ABImemcpy_unaligned.o 118 I64DivMod.o 560 I64DivZer.o 2 cexit.o 10 cmain.o 30 cstartup_M.o 12 data_init.o 40 memchr.o 88 packbits_init_single.o 56 strchr.o 22 strlen.o 54 vector_table_M.o 66 ------------------------------------------------- Total: 1 058 shb_l.a: [5] dwrite.o 30 exit.o 20 iarttio.o 128 iarwrite.o 34 iarwstd.o 32 write.o 16 ------------------------------------------------- Total: 260 Gaps 32 6 Linker created 16 1 024 ----------------------------------------------------- Grand Total: 7 566 138 1 037 ******************************************************************************* *** ENTRY LIST *** Entry Address Size Type Object ----- ------- ---- ---- ------ .iar.init_table$$Base 0x1ccc -- Gb - Linker created - .iar.init_table$$Limit 0x1cdc -- Gb - Linker created - ?main 0x1d4d Code Gb cmain.o [4] CSTACK$$Base 0x20000010 -- Gb - Linker created - CSTACK$$Limit 0x20000410 -- Gb - Linker created - Delay_ms 0x1c01 0x1a Code Gb main.o [1] LoadInt 0x1ef 0x7a Code Lc xprintffull_nomb.o [2] Region$$Table$$Base 0x1ccc -- Gb - Linker created - Region$$Table$$Limit 0x1cdc -- Gb - Linker created - Test_CalcAdd 0x1b99 0x14 Code Gb test.o [1] Test_PrintInfo 0x1b89 0x10 Code Gb test.o [1] Test_SetLedStatus 0x1bad 0x18 Code Gb test.o [1] _GenldFullNoMb 0xb31 0x274 Code Lc xprintffull_nomb.o [2] _LdtobFullNoMb 0x72d 0x3d6 Code Lc xprintffull_nomb.o [2] _LitobFullNoMb 0x5dd 0x10a Code Lc xprintffull_nomb.o [2] _PrintfFullNoMb 0x41 0x19e Code Gb xprintffull_nomb.o [2] _Prout 0x1dd1 0x16 Code Gb xprout.o [2] _PutcharsFullNoMb 0xda5 0x2e Code Lc xprintffull_nomb.o [2] _PutfldFullNoMb 0x269 0x268 Code Lc xprintffull_nomb.o [2] _PuttxtFullNoMb 0x4d1 0x10c Code Lc xprintffull_nomb.o [2] __aeabi_cdcmple 0x13d9 Code Gb DblCmpLe.o [3] __aeabi_cdrcmple 0x1409 Code Gb DblCmpGe.o [3] __aeabi_d2iz 0x1575 Code Gb DblToS32.o [3] __aeabi_d2uiz 0x1901 Code Gb DblToU32.o [3] __aeabi_ddiv 0x16b9 Code Gb DblDiv.o [3] __aeabi_dmul 0x114d Code Gb DblMul.o [3] __aeabi_dsub 0x15d5 Code Gb DblSub.o [3] __aeabi_i2d 0x15b1 Code Gb S32ToDbl.o [3] __aeabi_ldiv0 0x1949 Code Gb I64DivZer.o [4] __aeabi_ui2d 0x1929 Code Gb U32ToDbl.o [3] __aeabi_uldivmod 0xf1d Code Gb I64DivMod.o [4] __cmain 0x1d4d Code Gb cmain.o [4] __dwrite 0x1d0d 0x1e Code Gb dwrite.o [5] __exit 0x1ab9 0x14 Code Gb exit.o [5] __iar_Fail_s 0xe4d 0x1c Code Gb xfail_s.o [2] __iar_Memchr 0xec5 Code Gb memchr.o [4] __iar_Strchr 0xe35 Code Gb strchr.o [4] __iar_close_ttio 0x1acd 0x2e Code Gb iarttio.o [5] __iar_dadd 0x15e5 Code Gb DblSub.o [3] __iar_data_init3 0x1c81 0x28 Code Gb data_init.o [4] __iar_dsub 0x194d Code Gb DblAdd.o [3] __iar_dsubStart 0x195f Code Gb DblAdd.o [3] __iar_frexp 0x1375 Code Gb frexp.o [3] __iar_frexp64 0x1369 Code Gb frexp.o [3] __iar_frexpl 0x1375 Code Gb frexp.o [3] __iar_get_ttio 0x1afd 0x4c Code Gb iarttio.o [5] __iar_ldexp64 0x1439 Code Gb ldexp.o [3] __iar_lookup_ttioh 0x1b7b 0x4 Code Gb XShttio.o [2] __iar_packbits_init_single3 0x1c47 0x38 Code Gb packbits_init_single.o [4] __iar_program_start 0x1e09 Code Gb cstartup_M.o [4] __iar_scalbln64 0x1439 Code Gb ldexp.o [3] __iar_scalbn64 0x1439 Code Gb ldexp.o [3] __iar_sh_stdout 0x1d2b 0x20 Code Gb iarwstd.o [5] __iar_sh_write 0x1ca9 0x22 Code Gb iarwrite.o [5] __iar_ttio_guard_lock 0x1b4d 0x1e Code Gb XShttio.o [2] __iar_ttio_guard_unlock 0x1b6b 0x10 Code Gb XShttio.o [2] __iar_ttio_handles 0x20000000 0x8 Data Lc XShttio.o [2] __iar_unaligned_memcpy 0x12f1 Code Gb ABImemcpy_unaligned.o [4] __iar_unaligned_memcpy4 0x1311 Code Gb ABImemcpy_unaligned.o [4] __iar_unaligned_memcpy8 0x1311 Code Gb ABImemcpy_unaligned.o [4] __low_level_init 0x1d6b 0x4 Code Gb low_level_init.o [2] __vector_table 0x0 Data Gb vector_table_M.o [4] __write 0x1cfd 0x10 Code Gb write.o [5] _call_main 0x1d59 Code Gb cmain.o [4] _exit 0x1d75 Code Gb cexit.o [4] _main 0x1d67 Code Gb cmain.o [4] abort 0x1943 0x6 Code Gb abort.o [2] exit 0x1d6f 0x4 Code Gb exit.o [2] frexp 0x1369 Code Gb frexp.o [3] frexpl 0x1369 Code Gb frexp.o [3] ldexp 0x1439 Code Gb ldexp.o [3] ldexpl 0x1439 Code Gb ldexp.o [3] main 0x1c1b 0x2c Code Gb main.o [1] memchr 0xec5 Code Gb memchr.o [4] printf 0x1bd9 0x28 Code Gb printf.o [2] putchar 0x1cdd 0x20 Code Gb putchar.o [2] scalbln 0x1439 Code Gb ldexp.o [3] scalblnl 0x1439 Code Gb ldexp.o [3] scalbn 0x1439 Code Gb ldexp.o [3] scalbnl 0x1439 Code Gb ldexp.o [3] scale 0x6e7 0x46 Code Lc xprintffull_nomb.o [2] sec_hand 0x20000008 0x4 Data Lc xfail_s.o [2] strchr 0xe35 Code Gb strchr.o [4] strlen 0xe8d Code Gb strlen.o [4] ttio_guard 0x2000000c 0x1 Data Lc XShttio.o [2] [1] C:\Users\13232\Desktop\代码练习\iar\Debug\Obj [2] dl7M_tln.a [3] m7M_tl.a [4] rt7M_tl.a [5] shb_l.a 7 566 bytes of readonly code memory 138 bytes of readonly data memory 1 037 bytes of readwrite data memory Errors: none Warnings: none这份文件是IAR ARM 链接器生成的链接映射文件Map File它详细记录了程序编译链接后代码、数据在芯片存储中的分配情况。我会按文件的逻辑区块逐段解释核心内容因内容过长聚焦关键行而非逐行逐字节一、头部信息区# IAR ELF Linker V8.32.1.169/W32 for ARM 23/Mar/2026 15:04:51 # Copyright 2007-2018 IAR Systems AB. # # Output file C:\Users\13232\Desktop\代码练习\iar\Debug\Exe\iar.out # Map file C:\Users\13232\Desktop\代码练习\iar\Debug\List\iar.map # Command line # -f C:\Users\13232\AppData\Local\Temp\EW4C13.tmp # (C:\Users\13232\Desktop\代码练习\iar\Debug\Obj\main.o # C:\Users\13232\Desktop\代码练习\iar\Debug\Obj\test.o # --no_out_extension -o # C:\Users\13232\Desktop\代码练习\iar\Debug\Exe\iar.out --redirect # _Printf_PrintfFullNoMb --redirect _Scanf_ScanfFullNoMb --map # C:\Users\13232\Desktop\代码练习\iar\Debug\List\iar.map --log # unused_fragments,call_graph --log_file # C:\Users\13232\Desktop\代码练习\iar\Debug\List\iar.log --config # F:\anzhuangbao\IAR\IAR Systems\Embedded Workbench # 8.2\arm\CONFIG\generic_cortex.icf --semihosting --entry # __iar_program_start --vfe --text_out locale)第一行链接器版本IAR ELF Linker V8.32.1、运行环境W3232 位 Windows、目标架构ARM以及链接时间2026-03-23 15:04:51。CopyrightIAR 版权声明。Output file链接输出的可执行文件路径iar.out是 IAR 的目标文件格式。Map file当前这份映射文件的保存路径。Command line链接器执行时的命令行参数main.o/test.o参与链接的目标文件你的业务代码编译后的文件。--redirect _Printf_PrintfFullNoMb重定向 printf 函数到_PrintfFullNoMb无多字节支持的完整版 printf。--config generic_cortex.icf指定链接配置文件ICF 文件定义芯片的内存布局如 Flash/RAM 地址范围。--semihosting启用半主机模式通过调试器实现 PC 和开发板的输入输出交互。--entry __iar_program_start程序入口点IAR 的启动函数而非直接是 main。二、运行时模型属性RUNTIME MODEL ATTRIBUTES*** RUNTIME MODEL ATTRIBUTES *** CppFlavor * __SystemLibrary DLib __dlib_version 6CppFlavor *未启用 C 特性* 表示通用。__SystemLibrary DLib使用 IAR 的 DLib 运行时库提供 printf/strlen 等基础函数。__dlib_version 6DLib 库版本为 6。三、堆选择HEAP SELECTION*** HEAP SELECTION *** The basic heap was selected because no calls to memory allocation functions were found in the application outside of system library functions, and there are calls to deallocation functions in the application.链接器自动选择了基础堆原因是你的代码中没有直接调用 malloc/free 等内存分配函数仅系统库内部使用但存在释放函数调用因此启用最小化堆配置。四、内存布局分配PLACEMENT SUMMARY这是映射文件的核心记录代码 / 数据在 Flash0x0~0x7ffff和 RAM0x20000000~0x2000ffff中的具体地址。A0: place at 0x0 { ro section .intvec }; // A0段强制放在0x0地址存放中断向量表.intvec P1: place in [from 0x0 to 0x7ffff] { ro }; // P1段Flash区域0x0~0x7FFFF存放只读ro数据/代码 define block CSTACK with size 1K, alignment 8 { }; // 定义主栈CSTACK1KB大小8字节对齐 define block PROC_STACK with size 0M, alignment 8 { }; // 进程栈0大小未使用 define block HEAP with size 2K, alignment 8 { }; // 堆2KB大小 P2: place in [from 0x20000000 to 0x2000ffff] { rw, block CSTACK, block PROC_STACK, block HEAP }; // P2段RAM区域存放读写rw数据、栈、堆 initialize by copy { rw }; // 读写数据rw从Flash复制到RAM嵌入式系统标准操作子段详细分配重点行解释A0: 0x40 .intvec ro code 0x0 0x40 vector_table_M.o [4] // 中断向量表从0x0开始占用0x40字节64字节来自vector_table_M.o - 0x40 0x40 // A0段总大小0x40 P1: 0x1dd8 .text ro code 0x40 0xdf2 xprintffull_nomb.o [2] // printf函数实现从0x40开始占用0xDF2字节3570字节 .text ro code 0xe32 0x2 vector_table_M.o [4] // 向量表相关代码0xE32地址2字节 .text ro code 0xe34 0x16 strchr.o [4] // strchr函数0xE34地址22字节 ... .text ro code 0x1b88 0x50 test.o [1] // 你的test.o代码0x1B88地址80字节 .text ro code 0x1c00 0x46 main.o [1] // 你的main.o代码0x1C00地址70字节 .rodata const 0x1d80 0x1c test.o [1] // test.o中的只读常量0x1D80地址28字节 ... - 0x1e18 0x1dd8 // P1段总大小0x1DD87640字节 P2, part 1 of 2: 0xd P2-1 0x20000000 0xd Init block // RAM初始化块从0x20000000开始9字节 .data inited 0x20000000 0x8 XShttio.o [2] // 已初始化数据8字节 .bss inited 0x20000008 0x4 xfail_s.o [2] // BSS段未初始化数据4字节 ... P2, part 2 of 2: 0x400 CSTACK 0x20000010 0x400 Block // 主栈从0x20000010开始0x400字节1KB CSTACK uninit 0x20000010 0x400 Block tail // 栈为未初始化数据未使用内存Unused rangesFrom To Size ---- -- ---- 0x1e18 0x7ffff 0x7e1e8 // Flash剩余空间约500KB 0x2000000d 0x2000000f 0x3 // RAM小间隙3字节 0x20000410 0x2000ffff 0xfbf0 // RAM剩余空间约64KB显示 Flash/RAM 中未被使用的地址范围可用于评估代码是否超出芯片内存容量。五、初始化表INIT TABLE*** INIT TABLE *** Address Size ------- ---- Copy/packbits (__iar_packbits_init_single3) 1 source range, total size 0x4 (30% of destination): 0x1e14 0x4 // Flash中的初始化数据源地址 1 destination range, total size 0xd: 0x20000000 0xd // RAM中的目标地址链接器记录了 “从 Flash 复制数据到 RAM” 的映射关系将 Flash 0x1E14 地址开始的 4 字节数据解压 / 复制到 RAM 0x20000000 开始的 13 字节区域packbits 是压缩存储优化。六、模块汇总MODULE SUMMARY按目标文件 / 库文件统计内存占用Module ro code ro data rw data ------ ------- ------- ------- C:\Users\13232\Desktop\代码练习\iar\Debug\Obj: [1] main.o 70 0 0 // main.o只读代码70字节无只读/读写数据 test.o 80 112 0 // test.o只读代码80字节只读数据112字节 ------------------------------------------------- Total: 150 112 0 // 你的业务代码总占用 dl7M_tln.a: [2] // DLib库printf/字符串函数等 XShttio.o 60 3 9 ... Total: 3 802 4 13 m7M_tl.a: [3] // 浮点运算库 Total: 2 264 0 0 rt7M_tl.a: [4] // 运行时库内存操作/启动代码等 Total: 1 058 0 0 shb_l.a: [5] // 半主机库调试输出相关 Total: 260 0 0 Gaps 32 6 0 // 内存间隙地址对齐导致的空闲 Linker created 16 1 024 // 链接器创建的段如栈 ----------------------------------------------------- Grand Total: 7 566 138 1 037 // 全局总计ro code只读代码Flash 中ro data只读数据Flash 中如常量rw data读写数据RAM 中如全局变量。七、符号入口列表ENTRY LIST记录所有全局符号函数 / 变量的地址和大小Entry Address Size Type Object ----- ------- ---- ---- ------ .iar.init_table$$Base 0x1ccc -- Gb - Linker created - // 初始化表起始地址 CSTACK$$Base 0x20000010 -- Gb - Linker created - // 栈起始地址 CSTACK$$Limit 0x20000410 -- Gb - Linker created - // 栈结束地址栈大小0x410-0x100x4001KB Delay_ms 0x1c01 0x1a Code Gb main.o [1] // Delay_ms函数地址0x1C01大小26字节 Test_CalcAdd 0x1b99 0x14 Code Gb test.o [1] // Test_CalcAdd函数地址0x1B99大小20字节 main 0x1c1b 0x2c Code Gb main.o [1] // main函数地址0x1C1B大小44字节 printf 0x1bd9 0x28 Code Gb printf.o [2] // printf函数地址0x1BD9大小40字节八、最终统计 结果7 566 bytes of readonly code memory // 只读代码总大小7566字节 138 bytes of readonly data memory // 只读数据总大小138字节 1 037 bytes of readwrite data memory // 读写数据总大小1037字节 Errors: none // 无链接错误 Warnings: none // 无链接警告总结这份映射文件核心是内存分配你的代码 / 库函数存放在 Flash0x0~0x7FFFF栈 / 堆 / 全局变量存放在 RAM0x20000000~0x2000FFFF符合 ARM Cortex-M 芯片的内存布局规则。关键资源占用业务代码main.otest.o仅占 Flash 262 字节大部分 Flash 占用来自 DLib 库printf / 浮点函数RAM 主要占用是 1KB 的栈CSTACK。链接结果正常无错误 / 警告代码未超出芯片 Flash/RAM 容量剩余大量空闲空间。