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.

[参考译文] CCS/TMS320F28035:在 Intel Hex 中创建了文件空洞、而不是用0xFFFF 填充

Guru**** 2024750 points
Other Parts Discussed in Thread: TMS320F28035
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/791907/ccs-tms320f28035-in-intel-hex-file-holes-is-created-not-padding-with-0xffff

器件型号:TMS320F28035
主题中讨论的其他器件:CODECOMPOSER

工具/软件:Code Composer Studio

HII、
我是 Kalpesh、目前我正在研发 TMS320F28035控制器。 现在、我在 codecoser studio 中使用16位 MEMwidth。 在这里、我有定制 CAN 引导加载程序、我将使用我们自己的 Flasher 工具刷写应用程序十六进制文件。 因此、我观察到、当我通过 JTAG 进行刷写时、这是可以的。 但当我刷写应用程序十六进制文件时、该十六进制文件中会跳过一些地址、而不会使用0xFFFF 填充值。 实际上,在 JTAG 情况下,整个代码由 JATG 负责,但当我通过工具闪烁时,我希望在跳过的地址中填充0xFFFF 编号
下面是一个 Intel hex 文件、因此4个字后的第一行偏移9FFA 意味着两个偏移9FFE 和9FFF、值为跳过的时钟由 A000开始。

08 9FFA 00 767E BE6E 9A01 0006 9E
20 A000 00 761F 0278 1801 FFFE 1801 FF03 1801 FFFD 9A00 9B00 1E06 9A00 9B00 1E08 9A00 9B00 02

我希望像这样对齐和填充值是可行的吗?
0C 9FFA 00 767E BE6E 9A01 0006 FFFF FFFF 9E

如果需要更改.cmd 文件、我有它。

应用命令文件下

存储器

第0页:/*程序内存*/
/*内存(RAM/FLASH/OTP)块可移动到第1页进行数据分配*/
RAML0:origin = 0x008000、length = 0x000800 //片上 RAM 块 L0 */
RAML1:origin = 0x008800,length = 0x000400 //片上 RAM 块 L1 */
OTP:origin = 0x3D7800,length = 0x000400 //片上 OTP */
FLASHH:origin = 0x3E8002,length = 0x001FFE //片上闪存*/
FLASHG:origin = 0x3EA000、length = 0x002000 //片上闪存*/
FLASHF:origin = 0x3EC000、length = 0x002000 //片上闪存*/
FLASHE:origin = 0x3EE000、length = 0x002000 //片上闪存*/
//FLASHD:origin = 0x3F0000,length = 0x002000 //片上闪存*/
//FLASHC:origin = 0x3F2000,length = 0x002000 //片上闪存*/
//FLASHA:origin = 0x3F6000,length = 0x001F80 //片上闪存*/

csm_RSVD:origin = 0x3F7F80,length = 0x000076 // FLASHA 的一部分。 当时、使用所有0x0000进行编程
CSM 正在使用中。 *
BEGIN2:origin = 0x3E8000、length = 0x000002
CSM_PWL_P0:origin = 0x3F7FF8,length = 0x000008 // FLASHA 的一部分。 CSM 密码位置
FLASHA */

IQTABLES:origin = 0x3FE000,length = 0x000B50 //引导 ROM 中的 IQMath 表*/
IQTABLES2:origin = 0x3FEB50,length = 0x00008C //引导 ROM 中的 IQMath 表*
IQTABLES3:origin = 0x3FEBDC,length = 0x0000AA /*引导 ROM 中的 IQMath 表*/

ROM:origin = 0x3FF27C,length = 0x000D44 //引导 ROM */
复位:origin = 0x3FFFC0,length = 0x000002 //引导 ROM 的部分*/
向量:origin = 0x3FFFC2,length = 0x00003E //引导 ROM 的部分*/

第1页:/*数据存储器*/
/*内存(RAM/FLASK/OTP)块可被移动至 PAGE0以进行程序分配*/
/*寄存器保留在第1页中*/
BOOT_RSVD:origin = 0x000000,length = 0x000050 // M0的一部分,引导 ROM 将此用于栈*/
RAMM0:origin = 0x000050、length = 0x0003B0 //片上 RAM 块 M0 *
RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
RAML2:origin = 0x008C00,length = 0x000400 //片上 RAM 块 L2 */
RAML3:origin = 0x009000,length = 0x001000 //片上 RAM 块 L3 */
FLASHB:origin = 0x3F4000,length = 0x002000 //片上闪存*/

/*将段分配给内存块。
注:
DSP28_CodeStartBranch.asm 中用于重定向代码的 codestart 用户定义段
闪存时执行
ramfuncs 用户定义的段来存储将从闪存复制到 RAM 中的函数
*

部分

/*分配计划领域:*/
.cinit:> FLASHH PAGE = 0
.pinit:> FLASHH,PAGE = 0
.text:>> FLASHH | FLASHG | FLASHF | FLASHE PAGE = 0
codestart:> BEGIN2 page = 0
ramfuncs:load = FLASHH,
运行= RAML0、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
run_start (_RamfuncsRunStart)、
PAGE = 0

csmpasswds:>csm_PWL_P0 page = 0
csm_rsvd:>csm_RSVD page = 0

/*分配未初始化的数据段:*/
.stack:>RAMM0 page = 1.
.ebss:>> RAML3 | RAMM1 PAGE = 1.
.esysmem:>RAML2 page = 1.

/*初始化段进入闪存*/
/*要使 SDFlash 对这些内容进行编程、必须将它们分配到第0页*/
econst:> FLASHH PAGE = 0
.switch:>FLASHH PAGE = 0

/*分配 IQ 数学区域:*/
IQMath:> FLASHH PAGE = 0 //数学代码*/
IQmathTables :>IQTABLES,PAGE = 0,TYPE = NOLOAD

/*如果调用 IQNexp()或 IQexp(),请取消注释以下部分
库中的函数、以便利用
引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM
1个等待状态)。 如果此部分未注释、则为 IQmathTables2
将被加载到其他存储器(SARAM、闪存等)中并将采用
上行空间、但0等待状态是可能的。
*
/*
IQmathTables2:> IQTABLES2,PAGE = 0,TYPE = NOLOAD

IQMath.lib (IQmathTablesRam)


*
/*如果调用 IQNasin ()或 IQasin (),请取消注释以下部分
库中的函数、以便利用
引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM
1个等待状态)。 如果此部分未注释、则为 IQmathTables2
将被加载到其他存储器(SARAM、闪存等)中并将采用
上行空间、但0等待状态是可能的。
*
/*
IQmathTables3:> IQTABLES3,PAGE = 0,TYPE = NOLOAD

IQMath.lib (IQmathTablesRam)


*

/*.reset 是编译器使用的标准段。 它包含*/
/* C 代码_c_int00起始地址。 /*
/*当使用引导 ROM 时,此部分和 CPU 矢量*/
/*不需要表。 因此、默认类型设置为*/
/* DSECT */
.reset:> reset,page = 0,type = DSECT
VECTORS:> VECTORS PAGE = 0,TYPE = DSECT

/*
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*

PLZ 帮助我找到解决方案

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    假设您使用 C2000十六进制转换器实用程序创建十六进制文件。  可执行文件名为 hex2000。  我非常确信您的解决方案是使用图像模式。  请在 C28x 汇编工具手册中搜索标题为 "图像模式"和"-fill 选项"的子章节。   

    谢谢、此致、

    乔治