DSP控制器原理与技术应用
上QQ阅读APP看书,第一时间看更新

2.2.3 SECTIONS伪指令

SECTIONS伪指令是用来描述输入端是如何组合到输出端内的。SECTIONS部分,在程序里添加段名.XXXX(如.vectors.)用来指定该段名以下,另一个段名以上的程序(属于PAGE0)或数据(属于PAGE1)放到“>”符号后的空间名字所在的地方。

SECTIONS部分的段可分为初始化段和非初始化段。初始化段包含代码和常数等必须在DSP上电之后有效的数,故初始化块必须保存在如片内flash等非易失性存储器中;非初始化段中在程序运行过程中才向变量内写数据,所以非初始化段必须链接到易失性存储器中,如RAM。

CMD文件中各段含义见表2-2。

表2-2 CMD文件中各段的含义

1.初始化的段

.vectors,.text,.cinit,.const,.econst,.pinit和.switch。

.vectors:存放中断向量表。

.text:所有可以执行的程序代码和常量。

.cinit:存放程序中的变量初值和常量。

.const:包含字符串常量、浮点常量以及初始化的全局变量和静态变量(由const声明)的初始化和说明。

.econst:包含字符串常量和初始化的全局变量和静态变量(由far const声明)的初始化和说明。

.pinit:全局构造器(C++)程序列表。

.switch:包含switch声明的跳转地址列表。

2.非初始化的段

.bss,.ebss,.stack,.sysmem,和.esysmem

在执行过程中可以被操作和改变,只有在它们被程序调用时才会分配响应的值。

.bss:为程序中全局变量和静态变量保留的空间,在程序上电时,.cinit空间中的数据复制出来并存储在.bss空间中。

.ebss:为使用大寄存器模式时的全局变量和静态变量(由far声明)而预留的空间,在程序上电时,.cinit空间中的数据复制出来并存储在.ebss中。

.stack:为系统堆栈保留的空间,用于和函数传递变量或为局部变量分配空间。

.sysmem:为动态存储分配保留的空间。如果有宏函数,此空间被宏函数占用,如果没有的话,此空间保留为0。

.esysmem:为动态存储分配保留的空间。如果有far函数,此空间被相应地占用,如果没有,此空间保留为0。