CCS5.5 开发 DSP28335 : Flash 与 RAM 模式快速切换指南
在 DSP28335 开发中,Flash 和 RAM 模式的灵活切换是提升调试效率与保证产品稳定性的关键。本文将详解两种模式的核心区别,并提供仅需修改三处的快速切换方法。
1 、 Flash 与 RAM 模式的核心定义与区别
RAM 模式
- 定义:程序加载到 DSP 内部 RAM 中运行,依赖临时存储介质
- 核心特点:
- 读写速度快(无 Flash 擦写延迟),调试时程序下载速度快
- 断电后程序丢失,需重新下载
- 适合开发阶段的功能验证与调试
Flash 模式
- 定义:程序烧录到 DSP 的非易失性 Flash 存储器中运行
- 核心特点:
- 断电后程序不丢失,适合最终产品发布
- 首次烧录需擦写 Flash,速度较慢
- 部分高频函数需复制到 RAM 运行(解决 Flash 访问延迟问题)
关键区别对照表
维度 | RAM 模式 | Flash 模式 |
---|---|---|
存储介质 | 内部 RAM | 片上 Flash |
断电保存 | 否 | 是 |
下载速度 | 快(毫秒级) | 慢(需擦写,秒级) |
适用场景 | 开发调试阶段 | 最终产品部署 |
函数运行位置 | 全部在 RAM | 部分核心函数需复制到 RAM |
2. 对应的 CMD 文件配置
Flash 模式 CMD 文件
bash
/* F28335.cmd - Flash版本 */
MEMORY
{
PAGE 0: /* Program Memory */
PRAML0 : origin = 0x008000, length = 0x001000
FLASHA : origin = 0x3F0000, length = 0x008000
PAGE 1: /* Data Memory */
DRAML1 : origin = 0x009000, length = 0x001000
}
SECTIONS
{
.text : > FLASHA, PAGE = 0 /* 代码段放在Flash */
.cinit : > FLASHA, PAGE = 0
.switch : > FLASHA, PAGE = 0
/* 其他段配置... */
}
RAM 模式 CMD 文件
bash
/* F28335_RAM_lnk.cmd - RAM版本 */
MEMORY
{
PAGE 0: /* Program Memory */
PRAML0 : origin = 0x008000, length = 0x001000
RAML0 : origin = 0x009000, length = 0x001000
PAGE 1: /* Data Memory */
DRAML1 : origin = 0x00A000, length = 0x001000
}
SECTIONS
{
.text : > RAML0, PAGE = 0 /* 代码段放在RAM */
.cinit : > RAML0, PAGE = 0
.switch : > RAML0, PAGE = 0
/* 其他段配置... */
}
3. 关键源文件解析
DSP2833x_CodeStartBranch.asm
- 用途:Flash模式下的启动分支代码
- 功能:
- 在Flash启动时执行必要的初始化
- 处理Flash等待状态配置
- 跳转到主程序入口
- 调用时机:系统复位后首先执行
DSP2833x_SectionCopy_nonBIOS.asm
- 用途:非BIOS环境下的段复制功能
- 功能:
- 将初始化数据从Flash复制到RAM
- 处理.cinit段的初始化
- 支持运行时内存初始化
- 适用模式:主要用于Flash模式
DSP2833x_CodeStartBranchRAM.asm
- 用途:RAM模式下的启动分支代码
- 功能:
- 简化版的启动代码
- 直接跳转到主程序,无需Flash初始化
- 适合调试和快速启动
- 调用时机:RAM调试时使用
4. 最方便的切换方式:修改三处
第一处:主函数的宏定义
cpp
// 运行模式定义
#define RUNMODE FLASH // FLASH模式
// #define RUNMODE RAM // RAM模式
//===================== Flash 专用函数声明 =====================
#if RUNMODE == FLASH
extern void MemCopy(Uint16 *SourceAddr, Uint16 *SourceEndAddr, Uint16 *DestAddr);
extern Uint16 RamfuncsLoadStart, RamfuncsLoadEnd, RamfuncsRunStart;
#endif
第二处:切换 CMD 文件
在CCS项目属性中修改链接器命令文件:
Flash 模式 :
- F28335.cmd
RAM 模式 :
- F28335_RAM_lnk.cmd
第三处:禁用及释放相关源文件
在项目文件管理器中:
Flash模式配置:
✅ 包含 DSP2833x_CodeStartBranch.asm
✅ 包含 DSP2833x_SectionCopy_nonBIOS.asm
❌ 排除 DSP2833x_CodeStartBranchRAM.asm
RAM模式配置:
❌ 排除 DSP2833x_CodeStartBranch.asm
❌ 排除 DSP2833x_SectionCopy_nonBIOS.asm
✅ 包含 DSP2833x_CodeStartBranchRAM.asm