现在的位置: 首页 > 综合 > 正文

TMS320C6000 C/C++运行时环境笔记

2018年04月11日 ⁄ 综合 ⁄ 共 750字 ⁄ 字号 评论关闭

一.存储器模型

   C6000编译器把整个存储区当作单个线性存储块,并将其分配为代码区和数据区,一个C程序产生的代码和数据被放在各自连续的存储空间中,编译器假定存储器的32位地址空间都是可用的,但需要注意的是,连接器才是最终决定存储器映像(定义存储器映像并将代码和数据分配到目标存储器的是连接器,)编译器不对可用的存储器作任何假设,也不关心哪个地址不能被代码或者数据占用,以用哪些地址是保留给I/O设备或控制寄存器。

   1.段:

    编译器生成的可重定位的代码块和数据块称为段,系统设置不同,段分配到存储器的方式也不同,c6000编译器产生如下几个段:

 已初始化段,包含数据和执行代码

 (1).cinit段:包含变量初始值和常量值.

  (2).const段:包括字符串文字,浮点常量和在程序中被声明为const的数据(如果常量没有同时被声明为volatile

  (3).switch段:包含switch语句的跳转表

  (4).text段:默认的包含所有的可执行的代码

未初始化段:存储器中的保留空间,程序在运行时用它来创建和存储变量。C/C++编译器生成的未初始化段:

  (1).bss: 为全局变量和静态变量保留,如果为连接器设置了-c选项,则在程序开始时,C引导程序(c_int00)会将.cinit段的数据复制到bss段中,编译器会定义全局符号$bss,并指定其为.bss段的起始地址.

 (2).far段:为声明为far的全局变量和静态变量保留

 (3).stack段:系统栈,这个存储区用于传递参数和为局部变量分配存储空间.

 (4).system段:为动态存储空间分配保留的存储区,提请动态空间分配要求的函数有:malloc calloc,和realloc等等,如果程序中没有用这些函数,编译器不生成此段

 待续

抱歉!评论已关闭.