DSP2812学习笔记-CMD文件编写

首先我们要知道什么是CMD文件,它是用来干什么的,然后再来看看它有些什么,怎么去编写一个CMD文件。

CMD即command命令,命令文件指定存储区域的分配。由于 DSP281X 系列的独特性(片内存在 SRAM 和 FLASH)所以必须创建一个用户链接命令文件,以便在运行程序时,每个块都能对号入座。2812中CMD 采用的是分页制,其中PAGE0用于存放程序空间, 而PAGE1用于存放数据空间。我们结合SRAM.cmd(附件1)文件来介绍下CMD文件的编写。

CMD的伪指令:MEMORY 和 SECTIONS 是命令文件中最常用的两伪指令。

MEMORY伪指令用来表示实际存在目标系统中的可以使用的存储器范围,在这里每个存储器都有自己的名字,起始地址和长度。
SECTIONS伪指令是用来描述输入端是如何组合到输出端内的。

CMD 文件里有两个基本的段:初始化段和非初始化段。

初始化段包含代码和常数等必须在 DSP 上电之后有效的数。故初始化块必须保存在如片内 FLASH 等非遗失性存储器中。在SRAM.cmd文件中已初始化的段:.text,.cinit,.const,.econst,..pinit 和.switch..
每个小段里面存储的量说明如下:
.text:所有可以执行的代码和常量
.cinit:全局变量和静态变量的 C 初始化记录
.const:包含字符串常量和初始化的全局变量和静态变量(由 const)的初始化和说明
.econst:包含字符串常量和初始化的全局变量和静态变量(由 far const)的初始化和说明
.pinit:全局构造器( C++)程序列表
.switch:包含转换语气声明的列表

非初始化段中含有在程序运行过程中才像变量内写数据进去,所以非初始化段必须链接到易失性存储器中如 RAM。非初始化的段:.bss,.ebss,.stack,.sysmem,esysmem.(更好的理解就是,这些段就是存储空间而已)
每个小段里面存储的量说明如下:
.bss: 为全局变量和局部变量保留的空间,在程序上电时,cinit 空间中的数据复制出来并存储在.bss 空间中。
.ebss:为使用大寄存器模式时的全局变量和静态变量预留的空间,在程序上电时, cinit 空间中的数据复制出来并存储在.ebss 中。
.stack:为系统堆栈保留的空间,主要用于和函数传递变量或为局部变量分配空间。
.sysmem:为动态存储分配保留的空间。如果有宏函数,此空间被宏函数占用,如果没有的话,此空间保留0
.esysmem:为动态存储分配保留的空间。如果有 far 函数,此空间被相应的占用,如果没有的化,此空间保留为0

F28x系列DS的CMD文件分析:根据 F28X 系列 DSP 存储器映射图可以知道:数据空间起始地址是 0x0000,程序空间的起始地址是 0x3D8000,在程序空间中, M0SRAM 和 M1SRAM 各有 1K*16 位所以:

RAMM0 起始地址: 0x0000 长度: 0x0400(2 的 10 次为 1K)
RAMM1 起始地址: 0x0400(0x0000+0x0400) 长度: 0x0800(2 的 10 次方为 1K)

同理从 0x000800 到 0x000D00 这段地址里面装的是 2K*16 位的外围结构,映射表中很清楚的可以看出从 0x002000 到 0x006000 地址被保留,所以另一部分的外设地址定义是从 0x00700 开始。掌握一个机构的
起始来源,那么无论是 SRAM 还是 FLASH 里面的 CMD 文件我们参照存储器映射图我们都能看懂。

对于外扩256K的SRAM 来说,对照DSPF2812 的存储器映射来看,我们可以定义外扩存储器的地址在0X100000,那么链接的时候直接就链接到外部 SRAM 中,至于长度,设置小于 256K 或者等于 256K 就好了,一般设置为 0x011000.

对于程序在FLASH中运行时,需要注意的:1.关于初始化Flash的代码必须在RAM中运行;2.DSP在150M时钟频率下,FLASH中只能提供大约120M的时钟频率,所以有时候我们希望在RAM中运行时间敏感或计算量很大的子程序(比如 AD 采样)。由于我们所有代码都放在FLASH中,基于上述两种情况,这就必须在上电后将 FLASH 中的关于初始化Flash的程序以及时间敏感程序复制到RAM中运行,这时在.CMD 文件就必须划分一段用来设置 RAM 的载入和运行地址。

 附件1:

 1 MEMORY
 2 {
 3 PAGE 0 : 
 4    PRAMH0     : origin = 0x3f8000, length = 0x001000       
 5          
 6 PAGE 1 : 
 7    /* SARAM                     */     
 8    RAMM0    : origin = 0x000000, length = 0x000400
 9    RAMM1    : origin = 0x000400, length = 0x000400
10 
11    /* Peripheral Frame 0:   */
12    DEV_EMU    : origin = 0x000880, length = 0x000180
13    FLASH_REGS : origin = 0x000A80, length = 0x000060
14    CSM        : origin = 0x000AE0, length = 0x000010
15    XINTF      : origin = 0x000B20, length = 0x000020
16    CPU_TIMER0 : origin = 0x000C00, length = 0x000008
17    CPU_TIMER1 : origin = 0x000C08, length = 0x000008         
18    CPU_TIMER2 : origin = 0x000C10, length = 0x000008         
19    PIE_CTRL   : origin = 0x000CE0, length = 0x000020
20    PIE_VECT   : origin = 0x000D00, length = 0x000100
21 
22    /* Peripheral Frame 1:   */
23    ECAN_A     : origin = 0x006000, length = 0x000100
24    ECAN_AMBOX : origin = 0x006100, length = 0x000100
25 
26    /* Peripheral Frame 2:   */
27    SYSTEM     : origin = 0x007010, length = 0x000020
28    SPI_A      : origin = 0x007040, length = 0x000010
29    SCI_A      : origin = 0x007050, length = 0x000010
30    XINTRUPT   : origin = 0x007070, length = 0x000010
31    GPIOMUX    : origin = 0x0070C0, length = 0x000020
32    GPIODAT    : origin = 0x0070E0, length = 0x000020
33    ADC        : origin = 0x007100, length = 0x000020
34    EV_A       : origin = 0x007400, length = 0x000040
35    EV_B       : origin = 0x007500, length = 0x000040
36    SPI_B      : origin = 0x007740, length = 0x000010
37    SCI_B      : origin = 0x007750, length = 0x000010
38    MCBSP_A    : origin = 0x007800, length = 0x000040
39 
40    /* CSM Password Locations */
41    CSM_PWL    : origin = 0x3F7FF8, length = 0x000008
42 
43    /* SARAM                    */     
44    DRAMH0     : origin = 0x3f9000, length = 0x001000         
45 }
46  
47  
48 SECTIONS
49 {
50    /* Allocate program areas: */
51    .reset           : > PRAMH0,      PAGE = 0
52    .text            : > PRAMH0,      PAGE = 0
53    .cinit           : > PRAMH0,      PAGE = 0
54 
55    /* Allocate data areas: */
56    .stack           : > RAMM1,       PAGE = 1
57    .bss             : > DRAMH0,      PAGE = 1
58    .ebss            : > DRAMH0,      PAGE = 1
59    .const           : > DRAMH0,      PAGE = 1
60    .econst          : > DRAMH0,      PAGE = 1      
61    .sysmem          : > DRAMH0,      PAGE = 1
62    
63    /* Allocate Peripheral Frame 0 Register Structures:   */
64    DevEmuRegsFile    : > DEV_EMU,    PAGE = 1
65    FlashRegsFile     : > FLASH_REGS, PAGE = 1
66    CsmRegsFile       : > CSM,        PAGE = 1
67    XintfRegsFile     : > XINTF,      PAGE = 1
68    CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1      
69    CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1      
70    CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1      
71    PieCtrlRegsFile   : > PIE_CTRL,   PAGE = 1      
72    PieVectTable      : > PIE_VECT,   PAGE = 1
73 
74    /* Allocate Peripheral Frame 2 Register Structures:   */
75    ECanaRegsFile     : > ECAN_A,      PAGE = 1   
76    ECanaMboxesFile   : > ECAN_AMBOX   PAGE = 1
77 
78    /* Allocate Peripheral Frame 1 Register Structures:   */
79    SysCtrlRegsFile   : > SYSTEM,     PAGE = 1
80    SpiaRegsFile      : > SPI_A,      PAGE = 1
81    SciaRegsFile      : > SCI_A,      PAGE = 1
82    XIntruptRegsFile  : > XINTRUPT,   PAGE = 1
83    GpioMuxRegsFile   : > GPIOMUX,    PAGE = 1
84    GpioDataRegsFile  : > GPIODAT     PAGE = 1
85    AdcRegsFile       : > ADC,        PAGE = 1
86    EvaRegsFile       : > EV_A,       PAGE = 1
87    EvbRegsFile       : > EV_B,       PAGE = 1
88    ScibRegsFile      : > SCI_B,      PAGE = 1
89    McbspaRegsFile    : > MCBSP_A,    PAGE = 1
90 
91    /* CSM Password Locations */
92    CsmPwlFile      : > CSM_PWL,     PAGE = 1
93 
94 }
SRAM.cmd

 附件2:

转载于:https://www.cnblogs.com/HongZheng/p/5100777.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值