论文部分内容阅读
摘要:介绍了TMS320C54x系列DSP的存储结构,详细讨论了存储器和存储空间的映射关系,分析了存储空间的配置方法,并结合实例给出了C5410型DSP的存储器映射关系和链接配置文件。
关键词:DSP;存储器;存储空间;映射;链接配置文件
中图分类号:TP312文献标识码:A文章编号:1009-3044(2007)18-31604-03
Study on the Memory Mapping and the Configuration of the Memory Area in TMS320C54x Series DSP
BAI Shun-xian,MA Rui-shi
(School of Electrical and Information Engineering,The Second Northwest University for Nationalities,Yinchuan 750021,China)
Abstract:This paper introduces the memory structure of TMS320C54x, discusses the mapping of memory and memory area, and analyses the configuration method for the memory area. With an example we illustrate the memory mapping and command file of C5410.
Key words: DSP;memory;memory area;mapping;cmd file
1 引言
根据应用设计的需求,对DSP可用存储空间的分析和配置是开发过程的第一步,也是设计者需要考虑的关键问题,因此,存储空间分配的好坏不仅关系到开发设计的成败,而且反映了一个DSP程序员的水平和经验。对于DSP,我们总是遇到这样的两个名词,存储器(RAM、ROM、EPROM和FLASH等)和存储空间(程序存储空间、数据存储空间和I/O存储空间)。而这两个名词又总是阻碍着DSP设计者前进的脚步,使之望而却步。为此,本文首先探讨存储器和存储空间的映射关系的问题。同时,由于DSP的广泛应用,程序代码不断地增大,这就涉及到本文要探讨地第二个问题,如何合理地配置DSP的存储空间,使之更好地利用DSP地内部资源,并以C5410型DSP为例,给出了存储空间配置的CMD文件。
2 C54x系列DSP的存储结构
这里首先介绍一下一直困扰DSP设计者的两个概念:存储器和存储空间。存储器是一种物理空间,是DSP上可以存放数据和程序的实际空间(包括片内和片外的存储器,如片内的RAM,ROM和片外的FLASH等)。数据和程序最终是要放到物理空间上,但我们并不能直接访问它们,而是必须借助于映射空间才行,二者之间存在着一种映射关系。而存储空间正是这种映射空间,它本身是个“虚”空间,是个不存在的空间。所以,往往是映射空间远远大于实际的物理空间,有些映射空间,如IO映射空间,它本身还代表了一种接口。我们对映射空间的访问,实际上就是对映射在其上的物理空间的访问,而且只有那些物理空间映射到的映射空间才是我们真正可访问(读或写)的存储空间。
C54x系列DSP一般有192K字的存储空间,分为三个相互独立可选择的空间:64K字的程序存储空间、64K字的数据存储空间和64K字的I/O存储空间[1]。其中程序存储空间存放待执行的指令和执行过程中所需要的系数表(数学用表,常数),可使用片内或片外的RAM、ROM或FLASH等来构成;数据存储空间存放指令执行过程中产生的数据,可使用片内或片外的RAM和ROM来构成;I/O存储空间提供与外部存储器映射的接口,也可以作为外部数据存储空间使用。
所有C54x系列DSP片内都有随机存储器(RAM)和只读存储器(ROM),而RAM又分为两种类型:DARAM(双访问RAM,每个机器周期可以访问2次)和SARAM(单访问RAM,每个机器周期只能访问1次)。各存储器的大小取决于芯片的型号,如表1所示。
表1 C54x片内存储器资源配置[1] [2]
片内高2K字(映射到程序空间地址为FF80h~FFFFh)ROM中的内容是由TI公司定义并固化其中的,用于快速引导片上或片外RAM的引导加载器。因此小ROM(2K字)的器件,必须外加FLASH来存放用户程序。大ROM的器件,也可以将用户程序编入其中,但是需要TI服务商来写入,且不可自由改动,很不方便,所以一般不用作用户程序区。鉴于DARAM双存取特点以及DSP多总线流水线结构等的优势,建议使用RAM(尤其是DARAM)构成程序空间。但同时由于RAM的掉电易失性,所以需要外加FLASH来存储程序,在系统上电时可以从FLASH中自举引导加载程序到程序空间(RAM中)高速运行。
3 存储器和存储空间的映射关系
3.1片内存储器映射
针对存储器和存储空间两个不同的概念,本节详细分析C54x系列DSP的片内存储器的映射关系。
C54x通过处理器工作方式的状态寄存器(PMST)中的3个状态位,来选择片内存储器作为程序空间或数据空间。这3个状态位是:
(1)MP/MC位,决定是否使能片内ROM。MP/MC=0,片内ROM使能,映射到程序空间;MP/MC=1,则片内ROM不使能,此时将不会用到DSP的自引导程序。系统仅在复位时采样一次MP/MC引脚,并将引脚值传递给MP/MC位,而复位后便可通过软件设置MP/MC位来禁止或使能片上ROM。在使用仿真器开发程序时,需要将MP/MC置为1,此时DSP处于微处理器方式,应用程序通过TI公司的DSP开发软件CCS(Code Composer Studio)在线写入程序存储区;在DSP脱机运行时,需要将MP/MC清0,此时DSP处于微计算机方式,DSP在上电或复位后,其片内ROM中的自举加载程序将会首先自动运行,将用户程序代码移入程序空间后,再将控制权交给用户代码[3]。
(2)OVLY位。OVLY=1,则片内RAM映射到程序和数据空间,程序在RAM中运行;OVLY=0,则片内RAM只映射到数据存储空间,此时可用一个外部FLASH映射到程序空间,程序可在其中运行。显然这种方式不如程序在片内RAM中执行速度快。
(3)DROM位。对于不同型号的DSP,DROM代表不同的意义。如表1-1所示,C542、C543、C548片内只有2K字ROM,如前所述这2K字的内容是由TI公司定义的,不可修改,也不能用作用户程序区和数据区,因此DROM位对此类器件并无影响。对C541、C545、C546、C549、C5402而言,DROM位决定片内的ROM是否部分映射到数据空间:DROM=1,部分片内ROM映射到数据空间;DROM=0,片内ROM不映射到数据空间。而对C5410、C5416、C5420(无片内ROM)而言,片内ROM并不映射到数据空间,此时DROM位决定数据空间的高32K字是由片内的RAM构成还是由片外的RAM构成:DROM=1,片内排列的第二组32K字(片内RAM的排列是先排DARAM,再排SARAM,32K为一组。见图1所示)的RAM映射到数据空间的高32K字地址空间;DROM=0,则可用片外存储器映射。
图1 C5410片内RAM结构
3.2程序存储空间的分页扩展
程序设计者可根据片内存储器的大小和不同的应用需求,相应地配置这3个位,使系统的存储空间满足应用要求。但是由于程序代码的不断增长,64K的程序空间已不能满足需要,所以C54x系列DSP从C548开始,地址线增加到了23根(C5402为20根,C5420为18根),具有8M字的寻址空间(引入了页的概念,每页64K字),为此还增加了一个额外的存储器映像寄存器――程序计数器扩展寄存器XPC(当前程序空间地址的高7位),以及6条寻址扩展程序空间的指令。
扩展程序空间的映射由OVLY位决定,XPC选择页号(对应0~127,复位时初始为0)。OVLY=0,片内RAM不映射到程序空间,则有128个独立的64K字的程序页可用。OVLY=1,片内RAM将同时映射到数据空间和程序空间的相同位置,此时每页程序空间分为两部分:一个最大32K字的公用块和一个特定的32K字。所有页的低32K字空间都映射到片内RAM的000000h~007FFFh空间,每页的高32K空间则必须通过XPC指定页号访问。
4 存储空间的配置
4.1举例分析
在这里,我们以TMS320C5410为例介绍如何配置存储空间。C5410片内有16K字ROM,8K字DARAM和56K字SARAM。由于片内ROM的不易修改性和RAM的掉电易失性,因此外加一个64K字的FLASH存储器(映射到程序空间),用来存储用户程序和引导程序。自己编写上电引导程序,并和用户程序代码一起烧写到位于程序空间的FLASH中。对应的存储器映射关系如图2所示。上电后引导程序把用户程序代码从FLASH中加载到程序空间的RAM中运行。这种方法不但不占用数据空间的资源,而且可以使程序在片内RAM中高速运行。上电引导加载过程分为以下四个步骤[4]:(1)上电时,把C5410的MP/MC引脚接高电平,这样程序将从片外FLASH的0FF80H处开始执行。在FLASH中,从0FF80H到0FFFFH共80H个存储单元里存放有中断向量表,其中0FF80H为复位中断向量的入口地址。(2)在0FF80H处执行一条跳转指令,跳转到上电引导程序的入口地址处。假设这个引导程序位于FLASH中从0F800H开始的存储单元里,那么这个入口地址就是0F800H。(3)执行引导程序,从引导表中读出用户代码段的长度、源地址和目的地址,然后根据这些参数从源地址中读取用户代码,再写入到目的地址中。其中,源地址指向程序空间的FLASH,目的地址指向程序空间的RAM。(4) 在引导程序的最后再执行一条跳转指令,跳转到用户程序入口处继续运行。由此可以看出,上电引导加载过程中需要四部分内容,即用户程序、中断向量表、上电引导程序和引导表。这四部分内容都可以自己编写程序烧写到FLASH的相应地址中。
图2 C5410的存储器映射关系(MP/MC=1, OVLY=1, DROM=1)
4.2 CMD文件的编写
汇编器和链接器产生的目标文件采用COFF(Common Object File Format)公共目标文件格式,代码和数据块是按段(Section)来组织和存储的,便于模块化编程。链接器的作用是将由汇编器产生的OBJ文件(目标文件)作为输入块,将相应的段结合在一起产生可执行的输出模块,并将输出的段分配到存储器中的指定地址[5]。完成这个任务的是CMD文件(链接器配置文件或链接命令文件),简称为命令文件。其中关键是MEMORY和SECTIONS两个伪指令的使用。
CMD文件由3部分组成:①输入/输出文件定义:.obj文件:链接器要链接的目标文件;.lib文件:链接器要链接的库文件;.map文件:链接器生成的存储器映射文件;.out文件:链接器生成的可执行代码文件;②MEMORY命令:配置目标存储器,建立模型;③SECTIONS命令:根据这个模型来安排各个段的存放位置。
按照上节例子,程序中需要定义了四个基本的段,段名分别取为“.text”、“.vectors”、“.boot”和“.table”,它们的内容分别对应于用户程序、中断向量表、上电引导程序和引导表。烧写程序完成把四个段的内容烧写到FLASH存储器中。另外,还有“.bss”、“.data” 和“.stack”,它们的内容分别对应于未初始化的变量、初始化的数据和堆栈段。本例中,假设“.text”段的长度位1000H,它被烧写到FLASH中从08000H开始的存储单元,上电后将被加载到程序空间中从2000H开始的存储单元中。对应的目标程序的链接配置文件如下:
/** 输入、输出文件 **/
file.obj //指定目标文件
-o prog.out//命名输出文件
-m prog.m //创建输出MAP文件
/** 指定存储器配置 **/
MEMORY
{
PAGE 0: VECT: origin = 0xff80, len = 0x80
EPROG1: origin = 0x2000, len = 0x1000
EPROG2: origin = 0x3000, len = 0x1000
PAGE 1: STACK: origin = 0x3e00, len = 0x100
IDATA: origin = 0x4000, len = 0x4000
}
/** 指定输出段定位 **/
SECTIONS
{
.vectors: > VECT PAGE 0
.text: > EPROG1 PAGE 0
.boot: > EPROG2 PAGE 0
.table: > IDATA PAGE 1
.data: > IDATA PAGE 1
.bss: > IDATA PAGE 1
.stack: > STACK PAGE 1
}
5 结束语
随着DSP应用领域的不断拓广,程序代码的不断增加,使得存储空间的配置显得越来越重要。根据开发需求选择合适的DSP芯片,并加以扩展的片外存储器,正确地划分程序和数据空间中各段的大小,合理地配置存储空间,将使空间利用率大大提高。
参考文献:
[1]支长义,程志平,陈书立.等.DSP原理及开发应用[M].北京:北京航空航天大学出版社,2006.8.
[2]戴明桢,周建江.TMS320C54x DSP结构、原理及应用[M].北京:北京航空航天大学出版社,2001.11.
[3]胡海鹏,魏丰.TMS320C54X系列DSP存储空间的配置方法研究[J].电测与仪表,2005年第6期,47-50.
[4]雷勇.DSP系统设计与实践[M].北京:电子工业出版社,2004.8.
[5]刘益成.TMS320C54x DSP应用程序设计与开发[M].北京:北京航空航天大学出版社,2002.5.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
关键词:DSP;存储器;存储空间;映射;链接配置文件
中图分类号:TP312文献标识码:A文章编号:1009-3044(2007)18-31604-03
Study on the Memory Mapping and the Configuration of the Memory Area in TMS320C54x Series DSP
BAI Shun-xian,MA Rui-shi
(School of Electrical and Information Engineering,The Second Northwest University for Nationalities,Yinchuan 750021,China)
Abstract:This paper introduces the memory structure of TMS320C54x, discusses the mapping of memory and memory area, and analyses the configuration method for the memory area. With an example we illustrate the memory mapping and command file of C5410.
Key words: DSP;memory;memory area;mapping;cmd file
1 引言
根据应用设计的需求,对DSP可用存储空间的分析和配置是开发过程的第一步,也是设计者需要考虑的关键问题,因此,存储空间分配的好坏不仅关系到开发设计的成败,而且反映了一个DSP程序员的水平和经验。对于DSP,我们总是遇到这样的两个名词,存储器(RAM、ROM、EPROM和FLASH等)和存储空间(程序存储空间、数据存储空间和I/O存储空间)。而这两个名词又总是阻碍着DSP设计者前进的脚步,使之望而却步。为此,本文首先探讨存储器和存储空间的映射关系的问题。同时,由于DSP的广泛应用,程序代码不断地增大,这就涉及到本文要探讨地第二个问题,如何合理地配置DSP的存储空间,使之更好地利用DSP地内部资源,并以C5410型DSP为例,给出了存储空间配置的CMD文件。
2 C54x系列DSP的存储结构
这里首先介绍一下一直困扰DSP设计者的两个概念:存储器和存储空间。存储器是一种物理空间,是DSP上可以存放数据和程序的实际空间(包括片内和片外的存储器,如片内的RAM,ROM和片外的FLASH等)。数据和程序最终是要放到物理空间上,但我们并不能直接访问它们,而是必须借助于映射空间才行,二者之间存在着一种映射关系。而存储空间正是这种映射空间,它本身是个“虚”空间,是个不存在的空间。所以,往往是映射空间远远大于实际的物理空间,有些映射空间,如IO映射空间,它本身还代表了一种接口。我们对映射空间的访问,实际上就是对映射在其上的物理空间的访问,而且只有那些物理空间映射到的映射空间才是我们真正可访问(读或写)的存储空间。
C54x系列DSP一般有192K字的存储空间,分为三个相互独立可选择的空间:64K字的程序存储空间、64K字的数据存储空间和64K字的I/O存储空间[1]。其中程序存储空间存放待执行的指令和执行过程中所需要的系数表(数学用表,常数),可使用片内或片外的RAM、ROM或FLASH等来构成;数据存储空间存放指令执行过程中产生的数据,可使用片内或片外的RAM和ROM来构成;I/O存储空间提供与外部存储器映射的接口,也可以作为外部数据存储空间使用。
所有C54x系列DSP片内都有随机存储器(RAM)和只读存储器(ROM),而RAM又分为两种类型:DARAM(双访问RAM,每个机器周期可以访问2次)和SARAM(单访问RAM,每个机器周期只能访问1次)。各存储器的大小取决于芯片的型号,如表1所示。
表1 C54x片内存储器资源配置[1] [2]
片内高2K字(映射到程序空间地址为FF80h~FFFFh)ROM中的内容是由TI公司定义并固化其中的,用于快速引导片上或片外RAM的引导加载器。因此小ROM(2K字)的器件,必须外加FLASH来存放用户程序。大ROM的器件,也可以将用户程序编入其中,但是需要TI服务商来写入,且不可自由改动,很不方便,所以一般不用作用户程序区。鉴于DARAM双存取特点以及DSP多总线流水线结构等的优势,建议使用RAM(尤其是DARAM)构成程序空间。但同时由于RAM的掉电易失性,所以需要外加FLASH来存储程序,在系统上电时可以从FLASH中自举引导加载程序到程序空间(RAM中)高速运行。
3 存储器和存储空间的映射关系
3.1片内存储器映射
针对存储器和存储空间两个不同的概念,本节详细分析C54x系列DSP的片内存储器的映射关系。
C54x通过处理器工作方式的状态寄存器(PMST)中的3个状态位,来选择片内存储器作为程序空间或数据空间。这3个状态位是:
(1)MP/MC位,决定是否使能片内ROM。MP/MC=0,片内ROM使能,映射到程序空间;MP/MC=1,则片内ROM不使能,此时将不会用到DSP的自引导程序。系统仅在复位时采样一次MP/MC引脚,并将引脚值传递给MP/MC位,而复位后便可通过软件设置MP/MC位来禁止或使能片上ROM。在使用仿真器开发程序时,需要将MP/MC置为1,此时DSP处于微处理器方式,应用程序通过TI公司的DSP开发软件CCS(Code Composer Studio)在线写入程序存储区;在DSP脱机运行时,需要将MP/MC清0,此时DSP处于微计算机方式,DSP在上电或复位后,其片内ROM中的自举加载程序将会首先自动运行,将用户程序代码移入程序空间后,再将控制权交给用户代码[3]。
(2)OVLY位。OVLY=1,则片内RAM映射到程序和数据空间,程序在RAM中运行;OVLY=0,则片内RAM只映射到数据存储空间,此时可用一个外部FLASH映射到程序空间,程序可在其中运行。显然这种方式不如程序在片内RAM中执行速度快。
(3)DROM位。对于不同型号的DSP,DROM代表不同的意义。如表1-1所示,C542、C543、C548片内只有2K字ROM,如前所述这2K字的内容是由TI公司定义的,不可修改,也不能用作用户程序区和数据区,因此DROM位对此类器件并无影响。对C541、C545、C546、C549、C5402而言,DROM位决定片内的ROM是否部分映射到数据空间:DROM=1,部分片内ROM映射到数据空间;DROM=0,片内ROM不映射到数据空间。而对C5410、C5416、C5420(无片内ROM)而言,片内ROM并不映射到数据空间,此时DROM位决定数据空间的高32K字是由片内的RAM构成还是由片外的RAM构成:DROM=1,片内排列的第二组32K字(片内RAM的排列是先排DARAM,再排SARAM,32K为一组。见图1所示)的RAM映射到数据空间的高32K字地址空间;DROM=0,则可用片外存储器映射。
图1 C5410片内RAM结构
3.2程序存储空间的分页扩展
程序设计者可根据片内存储器的大小和不同的应用需求,相应地配置这3个位,使系统的存储空间满足应用要求。但是由于程序代码的不断增长,64K的程序空间已不能满足需要,所以C54x系列DSP从C548开始,地址线增加到了23根(C5402为20根,C5420为18根),具有8M字的寻址空间(引入了页的概念,每页64K字),为此还增加了一个额外的存储器映像寄存器――程序计数器扩展寄存器XPC(当前程序空间地址的高7位),以及6条寻址扩展程序空间的指令。
扩展程序空间的映射由OVLY位决定,XPC选择页号(对应0~127,复位时初始为0)。OVLY=0,片内RAM不映射到程序空间,则有128个独立的64K字的程序页可用。OVLY=1,片内RAM将同时映射到数据空间和程序空间的相同位置,此时每页程序空间分为两部分:一个最大32K字的公用块和一个特定的32K字。所有页的低32K字空间都映射到片内RAM的000000h~007FFFh空间,每页的高32K空间则必须通过XPC指定页号访问。
4 存储空间的配置
4.1举例分析
在这里,我们以TMS320C5410为例介绍如何配置存储空间。C5410片内有16K字ROM,8K字DARAM和56K字SARAM。由于片内ROM的不易修改性和RAM的掉电易失性,因此外加一个64K字的FLASH存储器(映射到程序空间),用来存储用户程序和引导程序。自己编写上电引导程序,并和用户程序代码一起烧写到位于程序空间的FLASH中。对应的存储器映射关系如图2所示。上电后引导程序把用户程序代码从FLASH中加载到程序空间的RAM中运行。这种方法不但不占用数据空间的资源,而且可以使程序在片内RAM中高速运行。上电引导加载过程分为以下四个步骤[4]:(1)上电时,把C5410的MP/MC引脚接高电平,这样程序将从片外FLASH的0FF80H处开始执行。在FLASH中,从0FF80H到0FFFFH共80H个存储单元里存放有中断向量表,其中0FF80H为复位中断向量的入口地址。(2)在0FF80H处执行一条跳转指令,跳转到上电引导程序的入口地址处。假设这个引导程序位于FLASH中从0F800H开始的存储单元里,那么这个入口地址就是0F800H。(3)执行引导程序,从引导表中读出用户代码段的长度、源地址和目的地址,然后根据这些参数从源地址中读取用户代码,再写入到目的地址中。其中,源地址指向程序空间的FLASH,目的地址指向程序空间的RAM。(4) 在引导程序的最后再执行一条跳转指令,跳转到用户程序入口处继续运行。由此可以看出,上电引导加载过程中需要四部分内容,即用户程序、中断向量表、上电引导程序和引导表。这四部分内容都可以自己编写程序烧写到FLASH的相应地址中。
图2 C5410的存储器映射关系(MP/MC=1, OVLY=1, DROM=1)
4.2 CMD文件的编写
汇编器和链接器产生的目标文件采用COFF(Common Object File Format)公共目标文件格式,代码和数据块是按段(Section)来组织和存储的,便于模块化编程。链接器的作用是将由汇编器产生的OBJ文件(目标文件)作为输入块,将相应的段结合在一起产生可执行的输出模块,并将输出的段分配到存储器中的指定地址[5]。完成这个任务的是CMD文件(链接器配置文件或链接命令文件),简称为命令文件。其中关键是MEMORY和SECTIONS两个伪指令的使用。
CMD文件由3部分组成:①输入/输出文件定义:.obj文件:链接器要链接的目标文件;.lib文件:链接器要链接的库文件;.map文件:链接器生成的存储器映射文件;.out文件:链接器生成的可执行代码文件;②MEMORY命令:配置目标存储器,建立模型;③SECTIONS命令:根据这个模型来安排各个段的存放位置。
按照上节例子,程序中需要定义了四个基本的段,段名分别取为“.text”、“.vectors”、“.boot”和“.table”,它们的内容分别对应于用户程序、中断向量表、上电引导程序和引导表。烧写程序完成把四个段的内容烧写到FLASH存储器中。另外,还有“.bss”、“.data” 和“.stack”,它们的内容分别对应于未初始化的变量、初始化的数据和堆栈段。本例中,假设“.text”段的长度位1000H,它被烧写到FLASH中从08000H开始的存储单元,上电后将被加载到程序空间中从2000H开始的存储单元中。对应的目标程序的链接配置文件如下:
/** 输入、输出文件 **/
file.obj //指定目标文件
-o prog.out//命名输出文件
-m prog.m //创建输出MAP文件
/** 指定存储器配置 **/
MEMORY
{
PAGE 0: VECT: origin = 0xff80, len = 0x80
EPROG1: origin = 0x2000, len = 0x1000
EPROG2: origin = 0x3000, len = 0x1000
PAGE 1: STACK: origin = 0x3e00, len = 0x100
IDATA: origin = 0x4000, len = 0x4000
}
/** 指定输出段定位 **/
SECTIONS
{
.vectors: > VECT PAGE 0
.text: > EPROG1 PAGE 0
.boot: > EPROG2 PAGE 0
.table: > IDATA PAGE 1
.data: > IDATA PAGE 1
.bss: > IDATA PAGE 1
.stack: > STACK PAGE 1
}
5 结束语
随着DSP应用领域的不断拓广,程序代码的不断增加,使得存储空间的配置显得越来越重要。根据开发需求选择合适的DSP芯片,并加以扩展的片外存储器,正确地划分程序和数据空间中各段的大小,合理地配置存储空间,将使空间利用率大大提高。
参考文献:
[1]支长义,程志平,陈书立.等.DSP原理及开发应用[M].北京:北京航空航天大学出版社,2006.8.
[2]戴明桢,周建江.TMS320C54x DSP结构、原理及应用[M].北京:北京航空航天大学出版社,2001.11.
[3]胡海鹏,魏丰.TMS320C54X系列DSP存储空间的配置方法研究[J].电测与仪表,2005年第6期,47-50.
[4]雷勇.DSP系统设计与实践[M].北京:电子工业出版社,2004.8.
[5]刘益成.TMS320C54x DSP应用程序设计与开发[M].北京:北京航空航天大学出版社,2002.5.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。