This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[FAQ] [常见问题解答] Flash——如何将应用程序从RAM配置修改为Flash配置?

Other Parts Discussed in Thread: C2000WARE

Q: 如何将应用程序从基于RAM的配置修改为基于Flash的配置?

 

A: 以下适用于TMS320F2838x、TMS320F2837x、TMS320F2807x、TMS320F28004x。

所有C2000Ware示例项目均提供了RAM和Flash的build配置。如要将bulid配置从RAM更改为Flash,用户可将项目导入CCS,然后右键单击该项目,选择“Build Configurations”->“Set Active”->“Flash”。

通过选择此Flash配置,用户可以注意到:

  1. _FLASH在“Project Build”设置下的“Predefined symbols”部分中定义。它用于定义和执行任何特定于Flash构建的代码。
  2. 为应用程序选择基于Flash的链接器命令文件,而非基于RAM的链接器命令文件。C2000Ware中提供了基于Flash的链接器命令文件以供参考(例如:XXX_FLASH_lnk_cpu1.cmd ,路径 C2000Ware_x_xx_xx_xx\device_support\XXX\common\cmd)。基于Flash的链接器命令文件将codestart映射到Flash入口点地址。
  3. 在基于Flash的链接器命令文件中,所有已经初始化的扇区均映射到Flash存储器。
  4. 需要从RAM执行的所有函数(初始化或0-wait)均已分配给代码中的.TI.ramfunc扇区。例如:Flash_initModule() 被分配给.TI.ramfunc扇区。必须从RAM中执行该Flash初始化程序(配置Flash等待状态、预取/缓存模式、电源等)。
  5. .TI.ramfunc扇区在基于Flash的链接器命令文件中映射到“Load”的Flash地址和“RUN”的RAM地址。
  6. 使用基于Flash的链接器命令文件中的ALIGN()指令,将映射到Flash的所有扇区在128位边界上对齐。
  7. 在应用程序中调用memcpy()函数,将.TI.ramfunc内容从Flash复制到RAM。在执行分配给.TI.ramfunc扇区的任何代码之前,需要调用memcpy()。
  8. 对于EABI类型的可执行文件:在链接器cmd文件中,所有映射到RAM的未初始化扇区都被定义为NOINIT扇区(使用指令“type = NOINIT”)。