dsp cmd文件、大小端问题 .out文件 cmd文件 调试器设置

内容转载自:https://blog.csdn.net/wordwarwordwar/article/details/77150762
http://www.360doc.com/showweb/0/0/905524599.aspx

一、DSP CCS工程文件构成

  1. 源文件(*.c *.asm) *.asm是汇编文件
  2. 头文件(*.h *.inc)
  3. cmd文件
    分为2种。
    一种是用来分配RAM空间的,用来将程序下载到RAM内调试,因为开发过程中大部分
    时间在调试程序,因此多用这类cmd;
    另一种是分配Flash空间的,当程序调试完毕后,需要将其烧写到Flash中固化。
  4. 库文件(*.lib *.dll)
    库文件包含了寄存器的地址和对应标示符的定义,还包括了标准C/C++运行支持库函数。
    *.lib为静态库文件,在编译时调用,调用时直接加载到内存;
    *.dll为动态库文件,在运行时调用。
    csl6713.lib用于小端(little endian)格式DSP,
    而csl6713e.lib用于大端(little endian)格式DSP。
    路径C:\CCStudio_v3.3PLA\C6000\csl\lib

二、大小端问题

       大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
       小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

大端模式

所谓的大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
例子:
0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000
0000440: b484 6c4e 004e ed00 0000 0000 0100 0000
在大端模式下,前32位应该这样读: e6 84 6c 4e ( 假设int占4个字节)
记忆方法: 地址的增长顺序与值的增长顺序相反

小端模式

所谓的小端模式(Little-endian),是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
例子:
0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000
0000440: b484 6c4e 004e ed00 0000 0000 0100 0000
在小端模式下,前32位应该这样读: 4e 6c 84 e6( 假设int占4个字节)
记忆方法: 地址的增长顺序与值的增长顺序相同

大小端模式

为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的 编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于 大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以随时在程序中(在ARM Cortex 系列使用REV、REV16、REVSH指令 [1]  )进行大小端的切换。

图解

对于0x11223344 储存如下

三、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
在这里插入图片描述

发布了56 篇原创文章 · 获赞 12 · 访问量 7849

猜你喜欢

转载自blog.csdn.net/weixin_44884357/article/details/105419413
今日推荐