关于MAP文件的一点认识
近来有很多朋友问及MAP文件,下面我就对MAP文件的一点理解和大家分享。
MAP文件是CCS软件编译后产生的有关DSP用到所有程序、数据及IO空间的一种映射文件。
一、生成方法
MAP文件主要有两种生成方法,一种是由系统自动生成,默认文件名为所建立的项目名(如XXX为项目名)加上.map后缀xxx.map,另一种在CMD文件中指定生成MAP文件,操作方法为在MEMORY指令前面加上“-m abc.map”,文件名可以任意。
二、文件格式
MAP文件大概分为文件头、内存配置、段映射、全局符号四部分。内存配置与CMD文件中的MEMORY指令关联,在CMD文件中定义的程序与数据区间定义,在该部分均可以找到对应,与CMD文件不同的时,在MAP文件中加入了一个实际使用的区间,即在程序中实际用到的空间长度。段映射部分与CMD文件中的SECTION指令关联,在该部分程序中所有的段实际映射的起始地址与实际长度均有详细说明。可以具体到程序中PROGMA指定的段和各个单独文件产生的OBJ文件。全局符号可以是程序使用的每一个函数、程序中定义的全局变量均可以在此找到对应的起始地址。MAP文件中采用两种方式列举,一种为按相应地址排列,另一种按全局符号字母排列。
三、存储地址
MAP文件默认保存在所在项目下面,由CMD文件产生的MAP文件保存在该项目的DEBUG目录下面。
******************************************************************************
TMS320C2000 COFF Linker PC v4.1.0
******************************************************************************
>> Linked Tue Apr 08 17:52:23 2008
OUTPUT FILE NAME: <./Debug/F2812.out>
ENTRY POINT SYMBOL: "_c_int00" address: 003f8362
MEMORY CONFIGURATION
name origin length used attr fill
---------------------- -------- --------- -------- ---- --------
PAGE 0: RAMM0 00000000 00000400 00000000 RWIX
BEGIN 003f8000 00000002 00000000 RWIX
PRAMH0 003f8002 00000ffe 000004a1 RWIX
RESET 003fffc0 00000002 00000000 RWIX
PAGE 1: RAMM1 00000400 00000400 00000400 RWIX
DEV_EMU 00000880 00000180 000000d2 RWIX
FLASH_REGS 00000a80 00000060 00000008 RWIX
CSM 00000ae0 00000010 00000010 RWIX
XINTF 00000b20 00000020 00000020 RWIX
CPU_TIMER0 00000c00 00000008 00000008 RWIX
PIE_CTRL 00000ce0 00000020 0000001a RWIX
PIE_VECT 00000d00 00000100 00000100 RWIX
ECANA 00006000 00000040 00000034 RWIX
ECANA_LAM 00006040 00000040 00000040 RWIX
ECANA_MOTS 00006080 00000040 00000040 RWIX
ECANA_MOTO 000060c0 00000040 00000040 RWIX
ECANA_MBOX 00006100 00000100 00000100 RWIX
SYSTEM 00007010 00000020 00000020 RWIX
SPIA 00007040 00000010 00000010 RWIX
SCIA 00007050 00000010 00000010 RWIX
XINTRUPT 00007070 00000010 00000010 RWIX
GPIOMUX 000070c0 00000020 00000020 RWIX
GPIODAT 000070e0 00000020 00000020 RWIX
ADC 00007100 00000020 0000001a RWIX
EVA 00007400 00000040 00000032 RWIX
EVB 00007500 00000040 00000032 RWIX
SCIB 00007750 00000010 00000010 RWIX
MCBSPA 00007800 00000040 00000025 RWIX
RAML0L 00008000 00000800 00000084 RWIX
RAML0H 00008800 00000800 00000000 RWIX
CSM_PWL 003f7ff8 00000008 00000008 RWIX
DRAMH0 003f9000 00001000 00000112 RWIX
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.switch 0 00000000 00000000 UNINITIALIZED
codestart
* 0 003f8000 00000000 UNINITIALIZED
.pinit 0 003f8002 00000000 UNINITIALIZED
.text 0 003f8002 00000472
003f8002 00000012 DSP281x_Adc.obj (.text)
003f8014 0000004b DSP281x_CpuTimers.obj (.text)
003f805f 0000014f DSP281x_DefaultIsr.obj (.text)
003f81ae 000000b4 DSP281x_Ev.obj (.text)
003f8262 00000014 DSP281x_Gpio.obj (.text)
003f8276 00000015 DSP281x_MemCopy.obj (.text)
003f828b 00000028 DSP281x_PieCtrl.obj (.text)
003f82b3 00000020 DSP281x_PieVect.obj (.text)
003f82d3 00000051 DSP281x_SysCtrl.obj (.text)
003f8324 0000003e Example_281xCpuTimer.obj (.text)
003f8362 00000044 rts2800.lib : boot.obj (.text)
003f83a6 0000003d : exit.obj (.text)
003f83e3 0000005a : fs_mpy.obj (.text)
003f843d 00000021 : fs_toul.obj (.text)
003f845e 00000007 : _lock.obj (.text)
003f8465 0000000f : args_main.obj (.text)
。。。
GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name
address name
-------- ----
00008000 .bss
00000000 .data
003f8002 .text
003f83c5 C$$EXIT
003f83e3 FS$$MPY
003f843d FS$$TOUL
003f80d2 _ADCINT_ISR
00007100 _AdcRegs
003f8118 _CAPINT1_ISR
。。。
GLOBAL SYMBOLS: SORTED BY Symbol Address
address name
-------- ----
00000000 ___edata__
00000000 edata
00000000 ___data__
00000000 .data
00000400 __STACK_SIZE
00000880 _DevEmuRegs
00000a80 _FlashRegs
00000ae0 _CsmRegs
|