• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【人气王+山东大学】TI DSP各种段的定义+wsdymg

学习TI DSP 一个离不开的文件就是CMD文件,cmd文件是编译完成之后链接各个目标文件时,用来指示各个数据、符号等是如何划分到各个段,以及每个段所使用的存储空间的。许多筒子对cmd文件有畏难情绪,不容易理解各个段的含义,特别是在程序编译没有问题,但是在链接生成可执行的.out遇到错误时更容易手足无措,所以我们就来详细解读一下cmd文件的具体含义。在cmd文件中能看到各种段.text .cinit .const等,这和通常系统中仅有TEXT, DATA, BSS( 或者arm系统的code,data,zi段 ),heap, stack有很大的区别:

TI段的定义:

    已初始化的段:.text  .cinit  .const  .econst  ..pinit  .switch

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

    .cinit: 全局变量和静态变量的C初始化记录

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

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

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

    .switch:  包含switch 声明的列表

未初始化的段:.bss  .ebss  .stack  .sysmem  .esysmen(另一种理解:这些段就认为存储空间而已)

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

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

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

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

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

可以看到已初始化段相当于通常系统的TEXT, DATA, BSS, 只不过ti将有些段进行了进一步的深化。而未初始化段中,堆对应的sysmem(esysmem), 栈对应stack。 bss和ebss在任何系统中都是必须的,但是可能其它系统把这些细节掩盖了,比如arm直接让__main操作了。TI也有相应的系统函数完成上述的数据复制搬运工作(主要是一些有初始化值的常量,存储的时候需要将这些值保存在flash中,运行的时候需要在ram中),这个函数就是cint00函数。

全部回复(4)
正序查看
倒序查看
2016-01-25 15:48
有没有理解这个定义用到什么实物上的作品呢?
0
回复
2016-01-25 15:53
@电源网-璐璐
有没有理解这个定义用到什么实物上的作品呢?
这个是C2000控制器的一段代码分析,最近项目里用到了DSP
0
回复
2016-01-25 15:56
@有道词典
这个是C2000控制器的一段代码分析,最近项目里用到了DSP
原创?
0
回复
2016-01-25 16:10
0
回复