CMD文件和GEL文件有什么区别?

2019-07-16 15:28发布

CMD文件和GEL文件有什么区别?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
dengdc
1楼-- · 2019-07-16 20:29

CMD文件是链接器要用的,决定程序各段怎么连接。
heweibig
2楼-- · 2019-07-17 01:47
 精彩回答 2  元偷偷看……
wuhany
3楼-- · 2019-07-17 02:51

是啊,他们有本质的区别啊
yszong
4楼-- · 2019-07-17 08:22

cmd文件分析
1,系统定义:  
.cinit 存放C程序中的变量初值和常量;
.const 存放C程序中的字符常量、浮点常量和用const声明的常量;
.switch 存放C程序中switch语句的跳针表;
.text 存放C程序的代码;
.bss 为C程序中的全局和静态变量保留存储空间;
.far 为C程序中用far声明的全局和静态变量保留空间;
.stack 为C程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果;
.sysmem 用于C程序中malloc、calloc和realloc函数动态分配存储空间。
2,用户定义:
#pragma CODE_SECTION (symbol, "section name"); #pragma DATA_SECTION (symbol, "section name")

单个地址的时候可以使用 #define
如 #define my_data *(volatile unsigned int*)0x000C

在数组变量时 使用#pragma 宏

XXX.h/XXX.c
#pragma DATA_SECTION(my_data,".data_section")
unsigned char my_data[1024];
在xxx.cmd中建立.data_section并赋予地址就可以了。


3.cmd作用
cmd由3部分组成:
1)输入/输出定义:.obj文件:链接器要链接的目标文件;.lib文件:链接器要链接的库文件;.map文件:链接器生成的交叉索引文件;.out文件:链接器生成的可执行代码;链接器选项;
2)MEMORY命令:描述系统实际的硬件资源;
3)SECTIONS命令:描述“段”如何定位。
Link的cmd文件用于DSP代码的定位。由于DSP的编译器的编译结果是未定位的,DSP没有操作系统来定位执行代码,每个客户设计的DSP系统的配置也不尽相同,因此需要用户自己定义代码的安装位置。以C5000为例,基本格式为:
-o sample.out
-m sample.map
-stack 100
sample.obj meminit.obj
-l rts.lib
MEMORY {
    PAGE 0: VECT: origin = 0xff80, length 0x80
    PAGE 0: PROG: origin = 0x2000, length 0x400
    PAGE 1: DATA: origin = 0x800, length 0x400
}
SECTIONS {
    .vectors : {} >PROG PAGE 0
    .text : {} >PROG PAGE 0
    .data : {} >PROG PAGE 0
    .cinit : {} >PROG PAGE 0
    .bss : {} >DATA PAGE 1
}
yszong
5楼-- · 2019-07-17 11:43
 精彩回答 2  元偷偷看……
spark周
6楼-- · 2019-07-17 11:48

太长了 不过确实剖析了二者的区别

一周热门 更多>