TI中文支持网
TI专业的中文技术问题搜集分享网站

28035拆分.text文件导致调试出错的问题

如题所示,由于项目文件稍大,28035提供的空间不够,于是通过CMD文件将“程序空间的”0X3F8000开始的空间作为程序空间用,将稍大的equlizaiont_module.obj文件放入该空间,这样.text文件被拆分成两个,一个在低地址的0X8000开始的区域,另一部分在0x3F8000开始的区域,如下所示 ,但是在RAM中调试运行的时候,程序一运行到0X3F8000开始的区域的时候,要么是死循环,要么就是跳转到0X0000的开始部分重新执行,请问大侠们这是怎么回事,给我支支招!

PAGE 0 :

RAML0L1              : origin = 0x008000, length = 0x000C00

SARAML0    : origin = 0x3f8000, length = 0x000800

SECTIONS

{

.text1        : {equalization_module.obj(.text)}> SARAML0, PAGE = 0  

.text2     : {*(.text)}> RAML0L1, PAGE = 0

}

Hank Zhao:

这样拆分没什么问题,你查看一下map文件中的实际分配情况。在进入死循环时,查看一下对应的是哪个地址和相应的C代码。

如题所示,由于项目文件稍大,28035提供的空间不够,于是通过CMD文件将“程序空间的”0X3F8000开始的空间作为程序空间用,将稍大的equlizaiont_module.obj文件放入该空间,这样.text文件被拆分成两个,一个在低地址的0X8000开始的区域,另一部分在0x3F8000开始的区域,如下所示 ,但是在RAM中调试运行的时候,程序一运行到0X3F8000开始的区域的时候,要么是死循环,要么就是跳转到0X0000的开始部分重新执行,请问大侠们这是怎么回事,给我支支招!

PAGE 0 :

RAML0L1              : origin = 0x008000, length = 0x000C00

SARAML0    : origin = 0x3f8000, length = 0x000800

SECTIONS

{

.text1        : {equalization_module.obj(.text)}> SARAML0, PAGE = 0  

.text2     : {*(.text)}> RAML0L1, PAGE = 0

}

D. E.:

回复 Hank Zhao:

谢谢你的回复!今天就这个问题我调试了一天。我发现产生软件错误中断没有固定的地址和C代码。为了发现错误地方,我还特意的将代码缩进,以至于用0X8000开始的3K的RAM能把代码全部放下,调试发现没有出错。后来我又把部分代码放在0X3F8200开始的RAM中调试,发现还是出错,出错的地方基本是程序执行了0X3F8200区域的代码导致。所以可以肯定的原因是因为部分OBJ文件放入了0X3F8000开始的这块RAM区域所产生的。我看了相关的datasheet,发现基本上描述SARAM的时候都没有计算这块区域在内。后来网上检索也发现好几个对0X3F8000这块SARAM区域的使用产生疑问:有的TI支持回复说这块固化了SCI BOOTLAODER代码,我查找了相关的资料Boot Rom User Guide—28035,确实有这段描述,但是有疑问的是:1.这个SARAM到底是FLASH还是SARAM,既然能固化为何DATASHEET数据表写“SARAM”??2:另外有一点很奇怪的是,我之前下载到该区间的自己编写的调试函数,在28035芯片断电后,下次调试时将所有代码放入到0X8000开始的RAM,在MEMORY窗口观察,居然还能看到我编写的数据,如果是RAM应该不能保存,不知道这是什么原因??

如题所示,由于项目文件稍大,28035提供的空间不够,于是通过CMD文件将“程序空间的”0X3F8000开始的空间作为程序空间用,将稍大的equlizaiont_module.obj文件放入该空间,这样.text文件被拆分成两个,一个在低地址的0X8000开始的区域,另一部分在0x3F8000开始的区域,如下所示 ,但是在RAM中调试运行的时候,程序一运行到0X3F8000开始的区域的时候,要么是死循环,要么就是跳转到0X0000的开始部分重新执行,请问大侠们这是怎么回事,给我支支招!

PAGE 0 :

RAML0L1              : origin = 0x008000, length = 0x000C00

SARAML0    : origin = 0x3f8000, length = 0x000800

SECTIONS

{

.text1        : {equalization_module.obj(.text)}> SARAML0, PAGE = 0  

.text2     : {*(.text)}> RAML0L1, PAGE = 0

}

D. E.:

回复 Hank Zhao:

另外还要补充的是,如果我将部分代码放在0X3F8175之后的区域,调试不会发生软件中断错误,但是会发生其他类型的错误,例如会发生该区域内的函数不能正确执行,特别是单步调试的时候,本来要执行0X3F8600放置的函数,结果跑到了0X8300去执行其他的代码,感觉太奇怪了,所以感觉是编译器链接的时候没有正确链接所导致,但是还要你们专家给我点意见,非常感谢

如题所示,由于项目文件稍大,28035提供的空间不够,于是通过CMD文件将“程序空间的”0X3F8000开始的空间作为程序空间用,将稍大的equlizaiont_module.obj文件放入该空间,这样.text文件被拆分成两个,一个在低地址的0X8000开始的区域,另一部分在0x3F8000开始的区域,如下所示 ,但是在RAM中调试运行的时候,程序一运行到0X3F8000开始的区域的时候,要么是死循环,要么就是跳转到0X0000的开始部分重新执行,请问大侠们这是怎么回事,给我支支招!

PAGE 0 :

RAML0L1              : origin = 0x008000, length = 0x000C00

SARAML0    : origin = 0x3f8000, length = 0x000800

SECTIONS

{

.text1        : {equalization_module.obj(.text)}> SARAML0, PAGE = 0  

.text2     : {*(.text)}> RAML0L1, PAGE = 0

}

mangui zhang:

回复 D. E.:

关于代码在RAM中不够调试拆分.text的详细讲解    请参考一下链接中的分享

http://bbs.21ic.com/icview-787526-1-1.html

如题所示,由于项目文件稍大,28035提供的空间不够,于是通过CMD文件将“程序空间的”0X3F8000开始的空间作为程序空间用,将稍大的equlizaiont_module.obj文件放入该空间,这样.text文件被拆分成两个,一个在低地址的0X8000开始的区域,另一部分在0x3F8000开始的区域,如下所示 ,但是在RAM中调试运行的时候,程序一运行到0X3F8000开始的区域的时候,要么是死循环,要么就是跳转到0X0000的开始部分重新执行,请问大侠们这是怎么回事,给我支支招!

PAGE 0 :

RAML0L1              : origin = 0x008000, length = 0x000C00

SARAML0    : origin = 0x3f8000, length = 0x000800

SECTIONS

{

.text1        : {equalization_module.obj(.text)}> SARAML0, PAGE = 0  

.text2     : {*(.text)}> RAML0L1, PAGE = 0

}

Hank Zhao:

回复 D. E.:

您好,0x008000和0x3F8000映射的是同一块RAM空间,也就是说在下载时发生了代码覆盖,从而造成自循环。断电后,RAM区域仍有代码,这可能是你之前在Flash中烧写过程序。

如题所示,由于项目文件稍大,28035提供的空间不够,于是通过CMD文件将“程序空间的”0X3F8000开始的空间作为程序空间用,将稍大的equlizaiont_module.obj文件放入该空间,这样.text文件被拆分成两个,一个在低地址的0X8000开始的区域,另一部分在0x3F8000开始的区域,如下所示 ,但是在RAM中调试运行的时候,程序一运行到0X3F8000开始的区域的时候,要么是死循环,要么就是跳转到0X0000的开始部分重新执行,请问大侠们这是怎么回事,给我支支招!

PAGE 0 :

RAML0L1              : origin = 0x008000, length = 0x000C00

SARAML0    : origin = 0x3f8000, length = 0x000800

SECTIONS

{

.text1        : {equalization_module.obj(.text)}> SARAML0, PAGE = 0  

.text2     : {*(.text)}> RAML0L1, PAGE = 0

}

D. E.:

回复 Hank Zhao:

谢谢!是这样的。还有个问题,我在TI.com.cn里面搜索TMS320F28035发现给出的规格是RAM 20KB, FLASH128KB,与数据表不对,不知道是怎么回事?是不是TI有这种规格的28035?

如题所示,由于项目文件稍大,28035提供的空间不够,于是通过CMD文件将“程序空间的”0X3F8000开始的空间作为程序空间用,将稍大的equlizaiont_module.obj文件放入该空间,这样.text文件被拆分成两个,一个在低地址的0X8000开始的区域,另一部分在0x3F8000开始的区域,如下所示 ,但是在RAM中调试运行的时候,程序一运行到0X3F8000开始的区域的时候,要么是死循环,要么就是跳转到0X0000的开始部分重新执行,请问大侠们这是怎么回事,给我支支招!

PAGE 0 :

RAML0L1              : origin = 0x008000, length = 0x000C00

SARAML0    : origin = 0x3f8000, length = 0x000800

SECTIONS

{

.text1        : {equalization_module.obj(.text)}> SARAML0, PAGE = 0  

.text2     : {*(.text)}> RAML0L1, PAGE = 0

}

Hank Zhao:

回复 D. E.:

TMS320F28035给出的RAM 20KB, FLASH128KB与数据表是一致的,datasheet上的是RAM 10KW,FLASH 64KW,数据单位不一样。

赞(0)
未经允许不得转载:TI中文支持网 » 28035拆分.text文件导致调试出错的问题
分享到: 更多 (0)