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.
你(们)好。
我可以使用 serial_flash_programmer 刷写闪烁示例、但当我刷写自己的应用程序时、我会得到错误状态:program_error、错误地址:0x3。 我在前面的一篇文章中要求检查应用程序链接器命令文件、以确保所有段都在128位地址上对齐。 如何检查情况是否如此? 此外、还有其他关于错误原因是什么的想法吗? 谢谢!
最棒的
Mike
Mike、
在您的应用程序链接器 cmd 文件中、您可以为此目的使用 align (8)。 例如、请参阅 C:\ti\c2000Ware_2_01_00_00\device_support\f2837xd\common\cmd\2837xD_flash_lnk_cpu1.cmd 。 请使用最新的 C2000Ware、因为链接器 cmd 文件最近更新以显示此内容。
谢谢、此致、
Vamsi
您好!
我尝试将 align (8)应用到我的链接器 cmd 文件、但仍然有问题。 当 我在串行闪存编程器中选择 DFU1时,是否还有其他可能导致我获得错误状态:program_error、error Address:0x3的事情?
谢谢!
最棒的
Mike
Mike、
您能否检查应用程序链接器 cmd 文件中是否有任何已初始化段映射到 RAM? 所有初始化段都应映射到闪存、以便内核能够将内容编程到闪存。
谢谢、此致、
Vamsi
您好、Vamsi、
这与从闪存加载但在 RAM 上运行有关、对吧? 那么、我很清楚、例如 下面各节中的 RAMLS2和 RAMGS1_2需要使用类似的命令加载到闪存中? 您是否有机会在章节中看到任何其他问题?
ramfuncs:load = FLASHD,
运行= RAML0、
load_start (_RamfuncsLoadStart)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)
我粘贴了下面链接器 cmd 文件的 SECTIONS 部分。 谢谢!
最棒的
Mike
部分
{
/*------------ 分配方案领域:---------------- *
codestart:> begin page = 0,align (8)
引导加载程序:>FLASHA PAGE=0,ALIG(8)
ramfuncs:load = FLASHB、
运行= RAMGS8、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (8)
ramfuncs0:load = FLASHA,
运行= RAMGS7、
load_start (_Ramfuncs0LoadStart)、
load_size (_Ramfuncs0LoadSize)、
load_end (_Ramfuncs0LoadEnd)、
run_start (_Ramfuncs0RunStart)、
run_size (_Ramfuncs0RunSize)、
run_end (_Ramfuncs0RunEnd)、
PAGE = 0、ALIGN (8)
ramfuncs1:load = FLASHA,
运行= RAMGS7、
load_start (_Ramfuncs1LoadStart)、
load_size (_Ramfuncs1LoadSize)、
load_end (_Ramfuncs1LoadEnd)、
run_start (_Ramfuncs1RunStart)、
run_size (_Ramfuncs1RunSize)、
run_end (_Ramfuncs1RunEnd)、
PAGE = 0、ALIGN (8)
ramfuncs2:load = FLASHA,
运行= RAMGS8,
load_start (_Ramfuncs2LoadStart)、
load_size (_Ramfuncs2LoadSize)、
load_end (_Ramfuncs2LoadEnd)、
run_start (_Ramfuncs2RunStart)、
run_size (_Ramfuncs2RunSize)、
run_end (_Ramfuncs2RunEnd)、
PAGE = 0、ALIGN (8)
ramfuncs3:load = FLASHA,
运行= RAMLS3、
load_start (_Ramfuncs3LoadStart)、
load_size (_Ramfuncs3LoadSize)、
load_end (_Ramfuncs3LoadEnd)、
run_start (_Ramfuncs3RunStart)、
run_size (_Ramfuncs3RunSize)、
run_end (_Ramfuncs3RunEnd)、
PAGE = 0、ALIGN (8)
Cla1Prog:load = FLASHC,
运行= RAMLS4_5、//|RAMLS5、
Load_start (_Cla1ProgLoadStart)、
load_size (_Cla1ProgLoadSize)、
Load_End (_Cla1ProgLoadEnd)、
run_start (_Cla1ProgRunStart)、
run_size (_Cla1ProgRunSize)、
Run_End (_Cla1ProgRunEnd)、
PAGE = 0、ALIGN (8)
.text:> FLASHE PAGE = 0,ALIG(8)
初始化:> FLASHE PAGE = 0,ALIG(8)
.cinit:load = FLASHA
运行= RAMM0 //M0
load_start (_cinitLoadStart)、
load_size (_cinitLoadSize)、
load_end (_cinitLoadEnd)、
run_start (_cinitRunStart)、
run_size (_cinitRunSize)、
run_end (_cinitRunEnd)、
PAGE = 0、ALIGN (8)
.pinit:load = FLASHA
运行= RAMM0、
load_start (_pinitLoadStart)、
load_size (_pinitLoadSize)、
load_end (_pinitLoadEnd)、
run_start (_pinitRunStart)、
run_size (_pinitRunSize)、
run_end (_pinitRunEnd)、
PAGE = 0、ALIGN (8)
switch:load = FLASHA
运行= RAMM0、
load_start (_switchLoadStart)、
load_size (_switchLoadSize)、
load_end (_switchLoadEnd)、
run_start (_switchRunStart)、
run_size (_switchRunSize)、
run_end (_switchRunEnd)、
PAGE = 0、ALIGN (8)
//GS1 CPU2至 CPU1
CPU2TOCPU1变量:运行= RAMGS1_2,PAGE = 1//CCPU2TOCPU1RAM
RUN_START (_CPU2TOCPU1Variable_START)、
run_size (_CPU2TOCPU1Variable_size)
run_end (_CPU2TOCPU1Variable2_end)
//将 CPU1更改为 CPU2信息的 GS14
VarCpu1Cpu2:运行= RAMGS14_2,页= 1
run_start (_VarCpu1Cpu2_start)、
run_size (_VarCpu1Cpu2_size)
RUN_END (_VarCpu1Cpu2_END)
ParamCpu1Cpu2:运行= RAMGS14_3,页= 1
run_start (_ParamCpu1Cpu2_start)、
run_size (_ParamCpu1Cpu2_size)
run_end (_ParamCpu1Cpu2_end)
.reset:> reset,page = 0,type = DSECT
CmdTable:> FLASHB,PAGE = 0,ALIGN(8)
FcnTable:> FLASHB,PAGE = 0,ALIGN (8)
/*初始化段进入闪存*/
//.econst:> FLASHF | FLASHG | FLASHH PAGE = 0
//.switch:> FLASHB PAGE = 0
/*---------- 分配未初始化的数据段:-------------------------------------------------------- *
.stack:>RAMM1 page = 1.
.ebss:> RAMD1 PAGE = 1.
.bss:> RAMD1 PAGE = 1.
econst:>RAMD1 page = 1.
.esysmem:>RAMD1 page = 1.
.data:>RAMD1 page = 1.
filter_RegsFile:> RAMGS0,PAGE = 1
// SHARERAMGS0:> RAMGS0,PAGE = 1
// SHARERAMGS1:>RAMGS1,PAGE = 1.
CLA1mathTables:load = FLASHD /*注意,从 RAM 运行时,加载和运行可以是相同的*/
运行= RAMLS1、
Load_start (_Cla1mathTablesLoadStart)、
load_size (_Cla1mathTablesLoadSize)、
Load_End (_Cla1mathTablesLoadEnd)、
run_start (_Cla1mathTablesRunStart)、
Run_Size (_Cla1mathTablesRunSize)、
Run_End (_Cla1mathTablesRunEnd)、
PAGE = 1、ALIGN (8)
/*Data Memory*/
SPI_DATA:ALIGN (0x40)> RAMLS2、PAGE = 1
SCI_DATA:ALIGN (0x40)> RAMLS2、PAGE = 1 //需要在一个 DP 中
SCI_Rx:ALIGN (0x100)> RAMLS2、PAGE = 1
SCI_Tx:ALIGN (0x200)> RAMLS2、PAGE = 1
// ProfilePos:>RAMGS1,page = 1.
// CANOpenData:>RAMGS1,page = 1.
// 2017年7月25日更新 Lily
//将 CPU1更改为 CPU2的 GS14
NV_DATA:ALIGN (64) run = RAMGS14_3,PAGE = 1 /*存储要保存的参数的 RAM 地址*/
End (_NV_DATA_End1)、
RUN_START (_NV_DATA_START)、
run_size (_nv_data_size)
RUN_END (_NV_DATA_END)
nv_data_modinf:block (64) run = RAMGS14_3,page = 1/*存储要保存的模型信息的 RAM 地址*/
run_start (_nv_data_modinf_start)、
run_size (_nv_data_modinf_size)
run_end (_nv_data_modinf_end)
nv_data_ioffsets:block (64) run = RAMGS14_3,page = 1
run_start (_nv_data_ioffset_start)、
run_size (_nv_data_ioffset_size)
run_end (_nv_data_ioffset_end)
nv_data_lastf:运行= RAMGS14_3,页= 1
run_start (_nv_data_lastf_start)、
run_size (_nv_data_lastf_size)
run_end (_nv_data_lastf_end)
ProfileData:运行= RAMGS14_3,页= 1
RUN_START (_ProfileData_start)、
run_size (_ProfileData_size)
RUN_END (_ProfileData_End)
/*使用 IPC API 驱动程序时需要以下部分定义*/
组:> CPU1TOCPU2RAM,PAGE = 1
{
PUTBUFFER
PUTWRITEIDX
GETREADIDX
}
组:> CPU2TOCPU1RAM,PAGE = 1
{
GETBUFFER:TYPE = DSECT
GETWRITEIDX:TYPE = DSECT
PUTREADIDX:TYPE = 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
Differit_RegsFile:>RAMGS5,PAGE = 1,fill=0x3333
*
/* CLA 特定部分*/
/* Cla1Prog:> RAMLS5,page=0*/
// CLADataLS0:> RAMLS0,page=1
// CLADataLS5:> RAMLS5,page=1
CLADataLS1:> RAMLS1,PAGE=1,ALIG(8)
/*CLA1和 CPU1共享数据存储器*/
Cla1Cpu1ShareLSR:> RAMLS1,PAGE=1,ALIG(8)
Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,PAGE = 1,ALIG(8)
CpuToCla1MsgRAM:> CLA1_MSGRAMHIGH,PAGE = 1,ALIG(8)
#ifdef CLA_C
/* CLA C 编译器段*/
//
//必须被分配给 CLA 具有写入访问权限的内存
//
CLAscratch:
{*。obj (CLAscratch)
。 += CLA_ScratchPad_size;
*。obj (CLAscratch_end)}> RAMLS1、PAGE = 1、ALIGN (8)
暂存区:>RAMLS1,页=1
.bss_cla:> RAMLS1,page = 1.
.const_cla:> RAMLS1,PAGE = 1.
CLA1mathTables:> RAMLS1,page = 1.
#endif //cla_C
}
Mike、
我没有查看整个链接器 cmd。 请检查 C2000Ware 中提供的示例链接器 cmd 文件、并根据需要修复链接器。
下面是我在高层次上注意到的一些问题。
您已将已初始化的段 const 映射到 RAM。 它应该被映射到闪存。
2.对于 cinit、Pinit、switch 等段、您不需要单独的加载和运行地址 请检查提供的示例链接器命令。
如果您有任何特定问题、请打开新帖子。
谢谢、此致、
Vamsi
Mike、
我希望这个调试器关闭。 我要关闭此帖子。
3月9日之前我不可用。 如果您有其他问题、请打开新帖子、我们的团队将为您提供进一步的帮助。
谢谢、此致、
Vamsi