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.
您好!
我正在创建一个我正在尝试下载到目标器件(F28379D)的应用程序。 这是在我的计算机上使用 c2000 serial_flash_programmer 完成的。 在目标端、我使用的是 C2000 SCI 闪存编程器(但在闪存中)。
我的应用程序的开始向量位于(0x098000、length=2)、其余代码位于 FLASHG 和 FLASHH。 这样可以为次级引导加载程序(FLASHA-FLASHF)腾出空间。
我正在使用具有推荐参数的 C2000 Hex Utility 工具(--boot --sci8 --ascii)。 当我下载固件文件时、我收到一个错误。 之所以出错、是因为目标地址超出范围。 如果我更改为 Intel 十六进制格式、这样更容易查看:
:02000004 0001 F9
:20 A000 0000009049B0C92C163048747B059680AF36C82EE173FA86098316B622A22FCF3B26
由于某种原因、地址0x01A000中大约有1、3kB 代码。 在链接器文件中、地址与此行相关:
RAMGS14:origin = 0x01A000、length = 0x001000
RAMGS15:origin = 0x01B000、length = 0x000FF8
这是一个 RAM 扇区。 为什么即使在我的固件输出文件中也是这样? 我无法看到它在代码中的任何位置被使用。 如果我在链接器文件中注释 RAMGS14行、我得到:
:02000004 0001 F9
:20 B000 0000009049B0C92C163048747B059680AF36C82EE173FA86098316B622A22FCF3B16
这来自 RAMGS15扇区。 如果我注释该行、我会得到:
:02000004 0008 F2
:20 0000 0000009049B0C92C163048747B059680AF36C82EE173FA86098316B622A22FCF3BC6
来自以下行:
FLASHA : origin = 0x080000, length = 0x002000
...这不是用在我的代码..
最后、如果我在链接器文件中注释 FALSHA 行、我将得到预期的输出-固件代码从 FLASHG 开始到 FLASHH。
我的问题是:为什么会获得这些额外的代码部分?
链接器文件如下所示:
内存
{
第0页:/*程序存储器*/
/*存储器(RAM/FLASH)块可移动到页1进行数据分配*/
/*开始用于"引导至闪存"引导加载程序模式*/
BEGIN:origin = 0x098000、length = 0x000002 // MAG:was 0x080000、0x000002 origin = 0x098000、length = 0x000002
//RAM_RES_BOOT_ROM:origin = 0x000002、length = 0x000121 //保留
RAMM0:origin = 0x000123、length = 0x0002DD
//RAM_RES_TI_RTOS:origin = 0x000780、length = 0x000080 //保留
RAMD0:origin = 0x00B000、length = 0x000800
RAMLS0:origin = 0x008000、length = 0x000800
RAMLS1:origin = 0x008800、length = 0x000800
RAMLS2:origin = 0x009000、length = 0x000800
RAMLS3:origin = 0x009800、length = 0x000800
RAMLS4:origin = 0x00A000、length = 0x000800
RAMGS14:origin = 0x01A000、length = 0x001000
RAMGS15:origin = 0x01B000、length = 0x000FF8
// RAMGS15_RSVD:origin = 0x01BFF8,length = 0x000008 //根据勘误建议"存储器:预取超出有效存储器",保留代码,且不使用此代码
复位:origin = 0x3FFFC0、length = 0x000002
/*闪存扇区*/
//FLASH_TI_OTP:origin = 0x070000、length = 0x000400 //数据表中列出
//DCSM_OTP:origin = 0x078000、length= 0x000400 //在数据表中列出(用户可配置)
FLASHA:origin = 0x080000、length = 0x002000 /*片上闪存*// MAG:was 0x080002、length = 0x001FFE
// FLASHB:origin = 0x082000,length = 0x002000 /*片上闪存*/保留用于引导加载程序
// FLASHC:origin = 0x084000, length = 0x002000 /*片上闪存*/保留...
// FLASHD : origin = 0x086000, length = 0x002000 /*片上 Flash */保留...
// FLASHE : origin = 0x088000, length = 0x008000 /*片上 Flash */ Reserved ...
// FLASHF : origin = 0x090000, length = 0x008000 /*片上 Flash */ Reserved ...
FLASHG:origin = 0x098002、length = 0x007FFE /*片上闪存*// MAG:原为0x098000、0x008000、但由于 codestart 而更改
FLASHH:origin = 0x0A0000、length = 0x008000 /*片上闪存*/
// FLASHI : origin = 0x0A8000,length = 0x008000 /*片上闪存*/保留用于上传新应用程序
// FLASHJ:origin = 0x0B0000,length = 0x008000 /*片上闪存*/保留...
FLASHK : origin = 0x0B8000,length = 0x002000 /*片上闪存*/
FLASHL:origin = 0x0BA000、length = 0x002000 /*片上闪存*/
FLASHM:origin = 0x0BC000,length = 0x002000 /*片上闪存*/
FLASHN:origin = 0x0BE000、length = 0x001FF0 /*片上闪存*/
// secure_rom:origin = 0x3F0000,length = 0x008000 //数据表中列出
// boot_ROM:origin = 0x3F8000,length = 0x007FC0 //数据表中列出
// vectors : origin = 0x3FFFC0, length = 0x000040 //数据表中列出
// FLASHN_RSVD:origin = 0x0BFFF0、length = 0x000010 //根据勘误建议"存储器:预取超出有效存储器"保留代码,且不用于此代码*/
第1页:/*数据存储器*/
/*存储器(RAM/FLASH)块可移动到 PAGE0进行程序分配*/
BOOT_RSVD:origin = 0x000002、length = 0x000121 // M0的一部分、引导 ROM 将此用于堆栈
RAMM1:origin = 0x000400、length = 0x0003F8 //片上 RAM 块 M1
// RAMM1_RSVD:origin = 0x0007F8,length = 0x000008 //根据勘误建议"存储器:在有效存储器之外进行预取",保留和不使用代码
RAMD1:origin = 0x00B800,length = 0x000800
RAMLS5 : origin = 0x00A800 , length = 0x000800
RAMGS0:origin = 0x00C000、length = 0x001000
RAMGS1:origin = 0x00D000、length = 0x001000
RAMGS2:origin = 0x00E000、length = 0x001000
RAMGS3:origin = 0x00F000、length = 0x001000
RAMGS4:origin = 0x010000、length = 0x001000
RAMGS5:origin = 0x011000;length = 0x001000
RAMGS6:origin = 0x012000、length = 0x001000
RAMGS7:origin = 0x013000、length = 0x001000
RAMGS8:origin = 0x014000、length = 0x001000
RAMGS9:origin = 0x015000、length = 0x001000
RAMGS10:origin = 0x016000、length = 0x001000
// RAMGS11:origin = 0x017000,length = 0x000FF8 //取消 F28374D、F28376D 器件的注释
// RAMGS11_RSVD:origin = 0x017FF8,length = 0x000008 //根据勘误建议"存储器:预取超出有效存储器",保留代码,且不使用此代码
RAMGS11:origin = 0x017000、length = 0x001000
RAMGS12:origin = 0x018000,length = 0x001000
RAMGS13:origin = 0x019000、length = 0x001000
CPU2TOCPU1RAM:origin = 0x03F800、length = 0x000400
CPU1TOCPU2RAM:origin = 0x03FC00、length = 0x000400
}
部分
{
/*分配计划领域:*/
.cinit :> FLASHG | FLASHH PAGE = 0、ALIGN (8)
.text:>> FLASHG | FLASHH page = 0、align (8)
codestart :> begin page = 0, align (8)
/*分配未初始化的数据段:*/
.stack:> RAMM1页= 1
.switch:> FLASHG PAGE = 0、ALIGN (8)
.reset:>RESET、PAGE = 0、TYPE = DSECT // DSECT =未使用
#if defined (__TI_EABI__)//基于 ELF 的 ABI
init_array:> FLASHG、page = 0、align (8)
.bss :>> RAMGS2 | RAMGS3 | RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8 | RAMGS9 | RAMGS10 | RAMGS11 | RAMGS12 | RAMGS13,页面= 1
.bss:output:> RAMLS3、page = 0
.bss:CIO:> RAMLS5,page = 1
.data :>> RAMLS5 | RAMGS0 | RAMGS1 ,页面= 1
.sysmem :> RAMLS5 | RAMGS0,页面= 1
/*初始化段进入闪存*/
.const:> FLASHH、PAGE = 0、ALIGN (8)
#else
.pinit:> FLASHG、page = 0、align (8)
.ebss :>> RAMLS5 | RAMGS0 | RAMGS1 , page = 1
.esysmem :> RAMLS5 ,页面= 1
.cio:> RAMLS5、page = 1
/*初始化段进入闪存*/
econst:>> FLASHH PAGE = 0、ALIGN (8)
#endif
Modbus:>> RAMGS13,页面= 1
Filter_Regs:52 > RAMGS0,页面= 1
SHARERAMGS0:> RAMGS0、PAGE = 1
SHARERAMGS1 :> RAMGS1 ,页面= 1
SHARERAMGS2 :> RAMGS2, page = 1
ramgs0:> RAMGS0,页面= 1
ramgs1:> RAMGS1、page = 1
#ifdef __TI_Compiler_version__
#if __TI_Compiler_version__>= 15009000
#if defined (__TI_EABI __)
.TI.ramfunc:{}load = FLASHG、
RUN = RAMLS0、
Load_start (RamfuncsLoadStart)、
Load_Size (RamfuncsLoadSize)、
Load_End (RamfuncsLoadEnd)、
RUN_START (RamfuncsRunStart)、
RUN_SIZE (RamfuncsRunSize)、
RUN_END (RamfuncsRunEnd)、
PAGE = 0、ALIGN (8)
#else
.TI.ramfunc:{}load = FLASHG、
RUN = RAMLS0、
Load_start (_RamfuncsLoadStart)、
Load_Size (_RamfuncsLoadSize)、
Load_End (_RamfuncsLoadEnd)、
RUN_START (_RamfuncsRunStart)、
RUN_SIZE (_RamfuncsRunSize)、
RUN_END (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (8)
#endif
#else
ramfuncs:load = FLASHG,
RUN = RAMLS0、
Load_start (_RamfuncsLoadStart)、
Load_Size (_RamfuncsLoadSize)、
Load_End (_RamfuncsLoadEnd)、
RUN_START (_RamfuncsRunStart)、
RUN_SIZE (_RamfuncsRunSize)、
RUN_END (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (8)
#endif
#endif
/*使用 IPC API 驱动程序时需要以下部分的定义*/
组:> CPU1TOCPU2RAM , page = 1
{
PUTBUFFER
PUTWRITEIDX
GET READIDX
}
组:> CPU2TOCPU1RAM , page = 1
{
GETBUFFER :类型= DSECT
GETWRITEIDX :类型= DSECT
PUTREADIDX :类型= DSECT
}
/*以下段定义适用于 SDFM 示例*/
filter1_RegsFile:> RAMGS1、page = 1、fill=0x1111
Filter2_RegsFile:> RAMGS2、page = 1、fill=0x2222
Filter3_RegsFile:> RAMGS3、page = 1、fill=0x3333
Filter4_RegsFile:> RAMGS4、page = 1、fill=0x4444
Difference_Regs 阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列
}
/*
//========================================
//文件结尾。
//========================================
*/
C2000版本 4_03_00_00
Code Composer Studio 版本:12.2.0.00009
作者:Martin
您能否附加/发布在/debug 目录下生成的.map 文件(它应与.out 文件位于同一目录下)。 这将告诉我们是不是链接器特意分配了某些内容、还是十六进制转换的一些赝像。
此致!
马修
Matthew、您好!
"明确界定的问题是半解决的问题"。 感谢您询问.map 文件。
我可以在.map 文件中看到以下条目:
FPUmathTables
* 0 0001a000 0000081a
0001a000 0000068c rts2800_fpu32_fast_replace_eabi.lib:FPUmathTables.obj (FPUmathTables)
0001a68c 000000d0:Logtable_F32.obj (FPUmathTables)
0001A75c 000000be:expectable_F32.obj (FPUmathTables)
它对应于链接器文件:
RAMGS14 : origin = 0x01A000, length = 0x001000
我使用 FFT 算法、海量 FPUmathTables。 我假设这样做是为了使算法从 RAM 运行得更快。
我不明白的是、这个文件放在 RAM 中。 我认为它应该被放置在 ROM 或 FALSH 中、然后在运行时移动到 RAM 中。
如果十六进制文件将其放置在 RAM 中而不是闪存中、则在下电上电后如何恢复它?
(正如我所说的)删除 RAMGS14、RAMGS15 和 FLASHA 后,我的问题就得到了解决。 那么 FPUmathTables 位于 FLASHG 或 FLASHH 的应用区域内。 但将其放在此处可能会使数学算法的运行速度变慢。
为了解决这个问题、我认为我可以把它放在 .TI.ramfunc 中-位于闪存中、但在运行时被复制到 RAM 中。 对于我自己的代码、我可以只编写 #pragma code_section (myFunction、".TI.ramfunc");但如果这是 C2000库、如何实现这一点? 数据大约为2kB。
作者:Martin
感谢您的全面响应、很高兴.map 文件帮助我们找到了分配给 RAM 的内容。 您的决赛陈述正确、为了获得最佳速度、您希望加载到闪存并从 RAM 运行。
我想 C2000Ware 目录中有一些示例/文档可以帮助实现上述功能。
此路径:C:\ti\c2000\C2000Ware_4_03_00_00\libraries\dsp\FPU\c28\examples\FFT\ 中有不少适用于 F2837x 和 FFT 的示例;
您可以在以下位置直接查看链接器:C:\ti\c2000\C2000Ware_4_03_00_00\libraries\DSP\FPU\c28\examples\common\f2837xd\f2837xD_FPU_RFFT_lnk.cmd
可以将.lib 分配给".econst 段"、该段又映射到闪存。
Twiddle 表具有单独的标注、其中包含 load/run 说明符。 看起来这可以根据需要由库中的.obj 级别完成
#if 已定义(use_tables)
FFT_Twidlets :load = FLASHB,
运行 = RAMGS12
RUN_START (_FFTTwidthRunStart)、
Load_start (_FFTTwidthLoadStart)、
Load_Size (_FFTTwidthLoadSize)、
页= 1、
{
-- library=c28x_fpu_dsp_library.lib (.econst)
}
econst 之前被分配给 RAM、或者 econst 是否没有被分配? 我不确定在假设库一直转到 econst 方面是否正确、但似乎就是这样。
我
此处还提供了以下 UG:C:\ti\c2000\C2000Ware_4_03_00_00\libraries\DSP\FPU\c28\docs\ 、其中详细介绍了这些库的哪些部分在 ROM 中、也有助于释放一些内存。
此致!
马修
Matthew、您好!
感谢您的回答。 有一些事情出现了,所以我以前不能尝试你的想法。
我看过了所有的 FFT 示例。 我试图用你建议的(或多或少)来解决它-它也是在另一个例子中。
已将.econst 分配给用于闪存的项目。
这是我的 cmd 链接器文件:
FLASHG:origin = 0x098002、length = 0x007FFE
FLASHH:origin = 0x0A0000、length = 0x007FF0
FLASHH_META:origin = 0x0A7FF0,length = 0x000010 //元数据-标记、时间、数据、版本和校验和
...
FPUmathTables :>> FLASHH, PAGE = 0
元数据 :> FLASHH_meta page = 0
...
FPUmathTables : load=FLASHH,
RUN = RAMGS2、
RUN_START (_FPUmathTablesRunStart)、
Load_start (_FPUmathTablesLoadStart)、
Load_Size (_FPUmathTablesLoadSize)、
页= 1
然后、我添加与".TI.ramfunc"(memcpy)相同的代码。 现在还不能测试我是否成功迁移它。 我想唯一的方法是运行代码并检查 RAMGS2是否具有我在输出十六进制文件中看到的数据模式。 这会让我遇到另一个问题。
我正在为 C2000十六进制实用程序工具使用--boot --sci8 --ascii 参数。 这很好。 但是,如果我只使用参数--英特尔,那么我的输出文件看起来都不同。 在我的代码中、闪存最后16个字节中有元数据:
#pragma retain(metaStruct )//确保编译器不会在代码中使用时将其优化掉
#pragma DATA_SECTION (metaStructuret、"metadata ");//将其放在代码段"metadata"中(请参阅命令链接器文件
const MetaStruct_T metaStructurt ={// mag:这是一个显示缺少数据的伪示例。 使用真实版本、时间等进行发布
.Marker1 = 0x1122、
.Marker2 = 0x3344、
.time = 0x5566、
.DateDayMon = 0x7788、
.DateYear = 0x99AA、
.VersionMajor= 0xBBCC、
.VersionMinor= 0xDDEE、
.checkSum = 0xFF00、
};
当我构建代码时、我在十六进制文件中获得以下输出:
:087FF00022446688AACCEE00D1
但是、如果我将存储器宽度设置为8、我将得到以下值(按预期):
:10FFE0002211443366558877AA99CCBBEEDD00FF19
我不明白默认存储器宽度= 16对于任何东西有多大用处。 但无论如何我都不会使用它。 我的问题是、当我将存储器宽度从默认值16更改为8时、整个存储器部分也会发生变化:
以下是存储器宽度为16的十六进制文件的开头:
:02000004 0009 F1
:0280000049EC
:20800800044342497100060A283F49D448498100060A284049D4430F060A284149D442149C
以下是 存储器宽度为16的十六进制文件的开头:
:02000004 0013 E7
:04000000490049E08A
:2000100004FE437C421E497671DD005206600A8F28063F024976D4E04806497681DD0052B2
存储器部分从 FLASHH 和 FLASHG (0x98000和0xA0000)移动到 RAMGS7和 RAMGS8 (0x13000和0x14000)
我不明白这一点。 因为如果我使用参数-ascii、而不是-intel、它实际上可以正常工作。 这是选项-boot 非常有效、但我不希望/不需要该选项。 我想这些数据只能通过这个特定的上传工具来添加。
当我只使用-intel 参数时、为什么内存段会移动?
提前感谢
作者:Martin
我需要更多时间来讨论这个问题、我需要让其他一些更熟悉十六进制输出选项的人加入进来。
此致!
马修
作为一个侧边考虑、您能否查看此应用手册以了解它是否解决了上述问题、或者至少为我们建议的设置提供指导?
https://www.ti.com/lit/pdf/SPRABV4
此致!
马修
Matthew、您好!
感谢您的答复。 您向我发送的链接与固件下载过程更为相关、但我已经查看了十六进制转换实用程序说明(https://downloads.ti.com/docs/esd/SPRU513J/Content/SPRU513J_HTML/hex_conversion_utility_description.html#STDZ0797666)。 但它并没有完全澄清我的问题。
提前感谢、
马丁
我正在使用--boot --sci8 --ascii 参数作为 C2000 Hex Utility 工具。 这很好。 但是,如果我只使用参数--英特尔,那么我的输出文件看起来都是不同的。
我看不到您在哪里解释为什么您需要英特尔格式。 因为应用手册《 C2000 微控制器串行闪存编程 》从不使用英特尔格式、所以很可能没有人测试过--boot --sci8 --intel 的组合。
为什么我只使用-intel 参数时内存部分会移动?
我无法重现此行为。 请复制并粘贴 Hex2000 发布在下一帖子中。 请勿使用屏幕截图。 如果使用了任何命令文件、我需要查看这些文件的内容。
谢谢。此致、
-乔治
您好、George、
我在等待你的答复,但我看到我从来没有按下"答复",所以我的答复来了。 提前感谢
我认为我没有解释过我使用十六进制格式的原因。 原因是我有其他项目使用此格式、并且我想对 我的所有项目使用相同的固件上传方法、这样就不必更改 Windows 程序即可进行上传。
此外、我更喜欢这种格式而不是 ASCII 格式、因为固件文件的大小是它的三分之一。 此外、调试对我而言更简单、因为您可以直接在每个十六进制文件行中看到数据块所属的地址。
最后,这是一个偏好的问题,我想...
HEX2000:
命令= "${CG_TOOL_HEX}"
命令行模式: ${command}${flags}${output_FLAG}${output}${inputs}
flags : --- boot -- sci8 -- ascii
对于 intes 案例,标记为=--intel
如果我在标志中添加--memwidth=8、则我的所有代码将从闪存区域0x98000-0xA7FF8 (闪存 G+H)删除 至 RAM 区域0x130000-0x14FFF0 (RAMGS7+8)
有一个会生成 SVN h 文件的预编译脚本、但它应该与输出文件无关。 noPOST-build-scripts
加油打气
马丁
您好!
请注意,今天是当地假日,因此您明天应该会听到回应。
谢谢
小
不幸的是、我需要确切地了解 Hex2000 在所有这些变量...之后调用
命令="$ {CG_TOOL_HEX}"
CMD 行模式: ${command}${flags}${output_FLAG}${output}${inputs}
... 展开了。 复制并粘贴 Hex2000 "Console"视图中访问控制台命令。 请勿使用屏幕截图。 如果它使用任何命令文件、我需要查看这些文件的内容。
谢谢。此致、
-乔治
您好、George、
感谢您的消息。 我已经列出了来自 CCS 控制台窗口的 hex2000命令的两种情形
我有一个预编译步骤: ..\spicaStd\CreateSvnInfo.bat (它制作了一个包含 SVN 信息的头文件)
我有一个编译后步骤、该步骤计算了要在十六进制文件的最后2个字节中覆盖的校验和。 但我在本次测试中删除了该器件。 输出是相同的。
===内存宽度8===========================================
构建辅助目标:"0822047_CurrentSharingMonitoring.hex"
调用:C2000十六进制实用程序
"C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-c2000_22.6.0.LTS/bin/hex2000 "--memwidth=8 --romwidth=8 --Intel -o "0822047_CurrentSharingMonitoring.hex""0822047_CurrentSharingMonitoring.out"
正在转换为 Intel 格式...
"0822047_CurrentSharingMonitoring.out" codestart => codestart
"0822047_CurrentSharingMonitoring.out".TI.ramfunc =>.TI.ramfunc
"0822047_CurrentSharingMonitoring.out".switch =>.switch
"0822047_CurrentSharingMonitoring.out".text =>.text
"0822047_CurrentSharingMonitoring.out".cinit =>.cinit
"0822047_CurrentSharingMonitoring.out".const =>.const
"0822047_CurrentSharingMonitoring.out" FPUmathTables => FPUmathTables
"0822047_CurrentSharingMonitoring.out"元数据=>元数据
完成构建辅助目标:"0822047_CurrentSharingMonitoring.hex"
十六进制文件的第一行:
:020000040013E7 (注意从0x130000开始)
十六进制文件中的最后2行:
:10FFE000112233445566778899AABBCCDDEEFF0019 (所有数据都在此处)
:00000001FF
===内存宽度默认(16)===================================================
构建辅助目标:"0822047_CurrentSharingMonitoring.hex"
调用:C2000十六进制实用程序
"C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-c2000_22.6.0.LTS/bin/hex2000 "-- Intel -o "0822047_CurrentSharingMonitoring.hex""0822047_CurrentSharingMonitoring.out"
正在转换为 Intel 格式...
"0822047_CurrentSharingMonitoring.out" codestart => codestart
"0822047_CurrentSharingMonitoring.out".TI.ramfunc =>.TI.ramfunc
"0822047_CurrentSharingMonitoring.out".switch =>.switch
"0822047_CurrentSharingMonitoring.out".text =>.text
"0822047_CurrentSharingMonitoring.out".cinit =>.cinit
"0822047_CurrentSharingMonitoring.out".const =>.const
"0822047_CurrentSharingMonitoring.out" FPUmathTables => FPUmathTables
"0822047_CurrentSharingMonitoring.out"元数据=>元数据
完成构建辅助目标:"0822047_CurrentSharingMonitoring.hex"
十六进制文件的第一行:
:020000040009F1 (从0x90000开始)
十六进制文件中的最后2行:
:087FF0001133557799BBDDFF49( 一半数据丢失 )
:00000001FF
hex2000工具会更改存储器区域、这一点很奇怪、因为它是一个单独的工具。 步骤、因为我理解这些步骤
我期待收到您的评论。
提前感谢
马丁
正在建造...
"C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-c2000_22.6.0.LTS/bin/hex2000 --memwidth=8 --romwidth=8 --intel -o "0822047_CurrentSharingMonitoring.hex""0822047_CurrentSharingMonitoring.out"
... 将地址加倍。 这是因为您已经从默认设置 -- memwidth=16 至8。
正在建造...
"C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-c2000_22.6.0.LTS/bin/hex2000 "-- Intel -o "0822047_CurrentSharingMonitoring.hex""0822047_CurrentSharingMonitoring.out"[/报价]... 导致出现默认 -- memwidth=16 和 --romwidth=8 。 现在、地址符合预期。 但是...
:087FF0001133557799BBDDFF49 ( 一半数据丢失 )您应该看到诊断 警告:数据正在写入自动生成的文件 。 懂了吗? 该附加文件具有该数据的另一半。 要禁用此行为、请添加以下选项: --romwidth=16 。
谢谢。此致、
-乔治
[/quote]
您好、George、
非常感谢。 这样就解决了我的问题。 我不知道默认的 ROM 宽度是8。 这有点棘手、但它解决了我的问题。
另一个注意事项是、我将一个结构放置在闪存扇区的末尾。 它设置版本和时间戳。 当我使用 memwidth=8时、该器件使用小端字节序、memwidth=16为大端字节序。
:107FF0002211443366558877AA99CCBBEEDD00FF89 (大端字节序)
:107FF000112233445566778899AABBCCDDEEFF0089 (小端字节序)
但我可以使用--swapbytes 选项,它会将它们交换回来。 我只是想知道这会对我的固件上传产生什么影响。 如果问题与我的初始问题有太大关系、我可以将该问题放入另一个字符串中。
感谢您的帮助!