内容转载自:https://blog.csdn.net/wordwarwordwar/article/details/77150762
http://www.360doc.com/showweb/0/0/905524599.aspx
一、DSP CCS工程文件构成
- 源文件(*.c *.asm) *.asm是汇编文件
- 头文件(*.h *.inc)
- cmd文件
分为2种。
一种是用来分配RAM空间的,用来将程序下载到RAM内调试,因为开发过程中大部分
时间在调试程序,因此多用这类cmd;
另一种是分配Flash空间的,当程序调试完毕后,需要将其烧写到Flash中固化。 - 库文件(*.lib *.dll)
库文件包含了寄存器的地址和对应标示符的定义,还包括了标准C/C++运行支持库函数。
*.lib为静态库文件,在编译时调用,调用时直接加载到内存;
*.dll为动态库文件,在运行时调用。
csl6713.lib用于小端(little endian)格式DSP,
而csl6713e.lib用于大端(little endian)格式DSP。
路径C:\CCStudio_v3.3PLA\C6000\csl\lib
二、大小端问题
大端模式
小端模式
大小端模式
图解
三、coff目标文件
coff是一种流行的二进制可执行文件格式,在CCS v5中扩展名为.out,可以直接下载到芯片中。可执行文件包括段头、可执行代码、初始化数据、可重定位信息和符号表字符串表等信息。
编译器处理段的过程为:
(1)把每个源文件都编译成独立目标文件(.obj),每个目标文件都有自己的段
(2)链接器将目标文件中相同段名的部分连接在一起,生成最终的coff可执行文件
CCS v5中的Compile Files完成功能(1),Build完成功能(2)。
四、cmd文件
cmd文件主要用于完成链接的功能,因此可以在cmd文件中使用链接命令,比如:
-stack 0x200 设置栈大小为0x200字节
-heap 0x200 设置堆大小为0x200字节
-l rst67xx.lib 链接rst67xx.lib库
除了链接命令外,cmd 文件还包括MEMORY和SECTOINS两部分,分别用于存储区的划分和段的分配。
MEMORY划分的格式为:
L2SRAM : o = 00000000h l = 00030000h /* L2 SRAM 192K /
o表示起始地址,l表示存储区长度(以字节为单位) 一个简单的例子(TMS320C6713为例,不同芯片不同),外设只添加了Timer0:
MEMORY
{
L2SRAM : o = 00000000h l = 00030000h / L2 SRAM 192K /
L2CACHE : o = 00030000h l = 00010000h / L2 Cache 64 K /
/ Peripheral /
CPU_TIMER0 : o = 01940000h l = 00040000 / Timer0 /
EXTERNAL : o = 80000000h l = 80010000h
}
SECTIONS
{
/ Allocate program areas /
.text > L2SRAM / code segment /
.cinit > L2SRAM / init segment /
/ Allocate data areas /
.stack > L2SRAM
.far > L2SRAM
.switch > L2SRAM / C switch table /
.tables > L2SRAM
.data > L2SRAM / data segment /
.bss > L2SRAM / data that haven’t init /
.sysmem > L2SRAM
.const > L2SRAM / string, const … /
.cio > L2SRAM
.buffers > EXTERNAL
C6713_Timer0_cmd > CPU_TIMER0 / Timer 0 /
}
cmd文件包括2部分 —— MEMORY与SECTIONS
MEMORY完成地址空间的划分;
SECTIONS完成地址空间的分配到具体用途(除了程序中通用段之外还可以有自定义段)。
NOTES: 平时开发时都是将程序下载到RAM空间,当要发布时需要下载到Flash空间,
此处为SRAM的cmd文件,Flash的cmd文件有所不同。
下面是TI公司DSK的cmd,可以直接参考,
//
/ C6713.cmd /
/ Copyright © 2010 Texas Instruments Incorporated /
/ /
/ Description: This file is a sample linker command file that can be /
/ used for linking programs built with the C compiler and /
/ running the resulting .out file on an TMS320C6713 /
/ device. Use it as a guideline. You will want to /
/ change the memory layout to match your specific C6xxx /
/ target system. You may want to change the allocation /
/ scheme according to the size of your program. /
/ /
//
-stack 0x2000
-heap 0x8000
MEMORY
{
IRAM o = 0x00000000 l = 0x00030000 / 192kB - Internal RAM /
L2RAM o = 0x00030000 l = 0x00010000 / 64kB - Internal RAM/CACHE /
EMIFCE0 o = 0x80000000 l = 0x10000000 / SDRAM in 6713 DSK /
EMIFCE1 o = 0x90000000 l = 0x10000000 / Flash/CPLD in 6713 DSK /
EMIFCE2 o = 0xA0000000 l = 0x10000000 / Daughterboard in 6713 DSK /
EMIFCE3 o = 0xB0000000 l = 0x10000000 / Daughterboard in 6713 DSK */
}
SECTIONS
{
.text > IRAM
.stack > IRAM
.bss > IRAM
.cio > IRAM
.const > IRAM
.data > IRAM
.switch > IRAM
.sysmem > IRAM
.far > IRAM
.args > IRAM
.ppinfo > IRAM
.ppdata > IRAM
/* COFF sections /
.pinit > IRAM
.cinit > IRAM
/ EABI sections */
.binit > IRAM
.init_array > IRAM
.neardata > IRAM
.fardata > IRAM
.rodata > IRAM
.c6xabi.exidx > IRAM
.c6xabi.extab > IRAM
}
五、调试器设置
下载工程到板子上之前要先完成调试器设置(就选择调试仿真器型号)
生成.ccxml文件
(ccs3.3是在建立工程之前完成仿真器选择,貌似不要这一步)
六、报错
“C:/CCStudio_v3.3PLA/C6000/csl/include/csl_chiphal.h”, line 267: fatal error: #error NO CHIP DEFINED (use -dCHIP_XXXX where XXXX is chip number, i.e. 6201)
原因:使用C6XCSL库需要定义芯片信号,错误提示没定义芯片型号
解决:一种方法,在main.c中的#inclde <csl.h>前添加#define CHIP_6713;
另一种解决办法:预定义一个符号CHIP_6713