200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > DSP 程序远程升级 / Bootloader设计指南(三)—— CMD文件与DSP存储空间

DSP 程序远程升级 / Bootloader设计指南(三)—— CMD文件与DSP存储空间

时间:2023-10-22 17:33:32

相关推荐

DSP 程序远程升级 / Bootloader设计指南(三)—— CMD文件与DSP存储空间

技术交流 & 最新设计指南获取方法

步骤1) 扫描下方二维码,进入微信公众号

步骤2) 获取最新指南,在公众号后台回复以下关键字:【bootloader】

步骤3) 有疑问,在公众号后台回复以下关键字:【交流群】

目录

1

初识Bootloader

1.1 一次Bootloader

1.2 二次Bootloader

1.3 DSP上电引导过程

2

关于c_int00

2.1 c_int00完成的工作

2.2 系统初始化

2.3 全局变量初始化

2.4 全局对象构造

2.5 main函数与exit函数的调用

3

CMD文件与DSP存储空间

3.1 MEMORY和SECTIONS指令

3.2 程序与数据“段”

4

Bootloader数据流

4.1 数据流结构

4.2 16-bit数据流

4.3 8-bit数据流

5

FLASH擦写操作 —— FLASH

API的使用

5.1 FLASH操作的重要特点

5.2 FLASH API使用步骤

5.3 FLASH API常用函数使用举例

6

Bootloader设计过程中的9大关键点

6.1 Bootloader程序在升级过程中不被擦除的实现方法

6.2 上电后先进入Bootloader再跳转至main()函数的实现方法

6.3 Bootloader程序作为CCS应用程序工程一部分的实现方法

6.4 Bootloader与上位机形成交互式通信

6.5 Bootloader程序能够对接收数据校验的实现方法

6.6 在数据出错等情况下能够自动重启的实现方法

7

CCS输出文件格式 ——

ASCII-Hex、Intel-Hex与Binary-Hex文件

7.1 CCS配置生成Hex文件的方法

7.2 ASCII-Hex

7.3 Intel-Hex

7.4 Binary-Hex

3 CMD文件与DSP存储空间

CMD的全称为链接命令配置文件。以ROM/FLASH和RAM两类存储器为对象,用户通过编写CMD文件,来管理和分配系统中的所有物理存储器和地址空间。DSP芯片的片内存储器,只要没有被出厂占用,用户都可以全权支配。用户编写完的程序经过开发环境(编译器)的编译,转换为芯片可以识别的机器码,最后下载到芯片中运行。CMD文件就是在编译源程序、生成机器码的过程中挥作用的,它作为用户的命令或要求,将物理存储器和地址空间分配方式交给编译器去执行。

CMD文件包括两方面的内容:

1) 用户声明系统的存储器资源。包括DSP芯片自带、外扩的存储器和空间,都要一一声明:有哪些存储器、位置和大小。

2) 用户声明资源分配情况。这是编写CMD文件的重点。

3.1 MEMORY和SECTIONS指令

MEMORY和SECTIONS指令是CMD文件中的核心指令。MEMORY指令用来指示存储空间,SECTIONS指令用来分配“段”到存储空间,即指定“段”的实际硬件空间。

1) MEMORY指令

作用:指示存储空间

MEMORY{PAGE 0 :name 0[(attr)]:orgin=constant, length=constant;PAGE n :name n[(attr)]:orgin=constant, length=constant;}

MEMORY、PAGE n、orgin、length,包括冒号、等号、花括号,都是关键字符,必不可少。

PAGE n表示把可用的资源空间再划分成几个大块,最多允许分256块,从PAGE 0到 PAGE 255。通常习惯于把PAGE 0作为程序空间,把 PAGE 1作为数据空间。

name n为存储空间名;orgin用来标明该段的起始地址;length用来指示该段的长度。

MEMORY指令示例:

示例中,在程序存储空间PAGE 0中划分了一个名为PROG的区域,起始地址为0x00000C00,所占空间为0x00001000。在数据存储空间划分了两个区域,SCRATCH区起始地址为0x00000060,所占空间为0x00000020;RAM1区起始地址为SCRATCH区结束之后(0x0000080),所占空间为0x00000200。

关于“end()”等更多的函数可以参考《TMSxxxxxxx Assembly Language Tools v18.1.0.LTS User’s Guide》。

2) SECTIONS指令

作用:分配段到存储空间,即指定段的实际硬件空间。

SECTIONS{name 0 :> 存储空间名称 ,PAGE = 页数;name n :> 存储空间名称 ,PAGE = 页数;}

SECTIONS、PAGE n、orgin、length,包括“: >”、等号、花括号,都是关键字符,必不可少。

name n为段名; “: >”为内存分配符,等效于load关键字,代表数段的存储位置,有时也会用到run关键字,代表段的运行位置;“存储空间名称”为MEMORY中已经分配好的存储空间名称。

SECTIONS指令示例(部分):

示例中,.text段被存储在PAGE 0的PROG区,而被运行在PAGE 1中由地址0x0200开始的区域;.econst段存储在RAM1区域(可以不指定PAGE,实际PAGE由MEMORY决定);.ebss段也存储在RAM1区域。

3.2 程序与数据“段”

程序中存在众多的段,这些段分为两种:已初始化段和未初始化段。

1)已初始化段:

已初始化段一般有:.text、.cinit、.const、.econst、.pinit、.switch、.vectors

.text:是编译后生成的二进制指令代码段,即所有可执行的代码和常量。属于“已初始化段”。我们编写的main主函数,子函数或子程序,中断服务程序,都会产生指令代码,也都属于这个段。

.cinit:该段中存放对全局变量和静态变量初始化的常数列表,有固定的格式。例如全局变量声明时的初值等,属于该段。它属于“已初始化段”,必须作为代码,存储在程序空间里,而且必须能够掉电保存。

.const:包含由const关键字修饰的字符串常量和初始化的全局变量和静态变量初始化列表。

.econst:包含由far const关键字修饰的字符串常量和初始化的全局变量和静态变量的初始化列表。

.pinit:全局构造器(C++语言用)程序列表。

.switch:包含switch声明的列表。

.vectors:中断向量段,也就是中断服务程序的入口地址段。很显然,这个段要求物理存储器必须能够掉电保存数据,属于“已初始化段”。

2)未初始化段

未初始化段一般有:.bss、.ebss、.stack、.sysmem、.esysmen

.bss:为全局变量和局部变量保留的空间,在程序上电时.cinit空间中的数据复制出来并存储到.bss空间中。

.ebss:为使用大寄存器模式时的全局变量和静态变量预留的空间,在程序上电时,cinit空间中的数据复制出来并存储在.ebss中。

.stack:为系统堆栈保留的空间,主要用于和函数传递变量或为巨变变量分配空间。

.sysmem:为动态存储分配保留的空间,如果有宏函数,此空间被空函数占用,如果没有的话,此空间保留为0。

.esysmen:为动态存储分配保留的空间,如果有far函数,此空间被相应的占用,如果没有的话,此空间保留为0。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。