SECTIONS中.data区别
BSS段
在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配
数据段
在采用段式内存管理的架构中,数据段(data segment)通常是指用来存放程序中已初始化全局变量的一块内存区域。数据段属于静态内存分配
代码段
在采用段式内存管理的架构中,代码段(text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域属于只读。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
堆栈
堆栈又称堆栈(stack)在计算机科学中,是一种特殊的链表形式的数据结构,它的特殊之处在于只能允许在链表的一端(称为栈顶,英文为top)进行添加和删除操作。另外堆栈数据结构的实现也可以通过数组来完成。
严格来说堆是指Heap,程序运行时供程序员来支配的一段内存。而栈Stack,多指函数调用时候参数的相互传递存在的内存区域。
由于堆栈数据结构只允许在一端进行操作,因而按照先进后出(LIFO-Last In First Out)的原理工作。
堆栈数据结构支持两种基本操作:压栈(push)和弹栈(pop):
1.                  压栈(入栈):将对象或者数据压入栈中,更新栈顶指针,使其指向最后入栈的对象或数据。2.                  弹栈(出栈):返回栈顶指向的对象或数据,并从栈中删除该对象或数据,更新栈顶
==================================================================================
TI的代码产生工具产生的目标文件是一种模块化的文件格式—COFF格式,代码和数据在COFF文件中以段的形式组织,一个COFF段是在memory map中占连续空间的一块code或data。COFF文件中包含了段的完备信息,如段的绝对地址,名字,属性以及数据等。这些段可分为两种,已初始化段和未初始化段;或者另一种分法,namely code,初始化data和未初始化data。
已初始化段主要包括数据表和可执行代码,如:.text,.cinit,.const等;未初始化段用于保留存储器空间,程序利用这些空间在运行时创建和存储变量,如.bss段,.stack段,.far段,.sysmem段等。有些段并不是一定会有的,比如.sysmem段,如果C程序没有用到malloc,calloc等这些函数来分配存储器空间的话,编译器就不创建.sysmem块。每个段的具体内容是: 
.text      存放可执行代码和浮点数常量 
.cinit      存放已明确初始化的全局变量和静态变量 
.const      存放已明确初始化的字符串常量,全局常量和静态常量 
.
bss      存放没有初始化的全局变量和静态变量。
.stack    为系统堆栈分配存储器。这个存储器用于将变量传递至函数以及分配局部变量。 
.far        以far声明的全局/静态变量 
.sysmem  为动态存储器函数malloc、calloc、realloc分配存储器空间。 
在小模式中,.bss块也为常数宏保留空间。在程序开始运行时,数据从.cinit块中拷贝至.bss块,这里是可以选择的,有两个选项-c和-cr决定了全局变量和静态变量的初始化方式。-c为运行时初始化,-cr为加载时初始化。编译器生成程序时,会将C程序中初始化的全局/静态变量的初始值按一定结构放在.cinit中,但实际全局/静态变量占用的地址空间在.bss段中。如果是-c选项,那么C初始化函数c_int00()会读取.cinit段中的记录信息,分别初始化.bss段中的全局/静态变量,最后调用main()函数。如果是-cr选项,那么全局/静态变量的初始化工作由loader程序完成,而不是c_int00()函数。也就是加载程序后,loader读取.cinit段的内容,然后初始化.bss的全局/静态变量,当使用JTAG调试时,CCS就是一个loader。 
========================================================
由三部分组成:
输入/输出定义:这一部分,可以通过ccs的“”菜单设置
。obj    链接的目标文件
。lib      链接的库文件
。map  生成的交叉索引文件
。out    生成的可执行代码
MEMORY命令:描述系统实际的硬件资源
SECTION命令:描述“段”如何定位
例子
.cmd文件
-c
-o hello.out
-m hello.map
-stack 100
-l rts2xx.lib
MEMORY
字符串常量存放在哪个内存区域
{
PAGE 0: VECT:origin=0x8000,length 0x040
PAGE 0: PROG:origin=0x8040,length 0x6000
PAGE 1: DATA:origin=0x8000,length 0x400
}
SECTIONS
{
.vextors >VECT PAGE 0
.text    >PROG PAGE 0
.bss    >DATA PAGE 1
.const  >DATA PAGE 1
}
存储模型:c程序的代码和数据如何定位
系统定义
.cinit    存放程序中的变量初值和常量
.const  存放程序中的字符常量、浮点常量和用const声明的常量
.switch  存放程序中switch语句的跳转地址表
.text    存放程序代码
.bss      为程序中的全局和静态变量保留存储空间
.far      为程序中用far声明的全局和静态变量保留空间
.stack    为程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果
.sysmem 用于程序中的malloc 、calloc 、和realoc 函数动态分配存储空间

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。