TI论坛
直播中

陈杰

7年用户 1408经验值
私信 关注
[问答]

使用TMS32OF2812将CCS3.1下正常的在线烧写flash工程移植到CCS4.2上不能引导app程序

在CCS3.1下,升级工程updata和主应用工程app能互相引导配合,实现在线烧写flash功能,长期运行过,在线升级一直没问题。主要过程是:app.Out烧写至CDE区,updata.out烧写至A区,程序正常启动时由updata程序引导至0x3E8000即app程序入口,需要升级时由app程序跳转至0x3F7FF6开始运行updata程序。
最近更换了xds560v2的仿真器,想将平台迁移至CCS4.2上,移植工程编译通过了,主应用工程app单独运行正常,但配合升级工程updata时出现了不能引导app程序的问题,后经反汇编单步调试,发现程序跳转至0x3E8000后进入死循环找不到app程序的_c_int00和mian(),对比两个平台生产的map文件发现,经过CCS4.2编译后的app程序的_c_int00地址变化了,而且不是个固定值,跟之前CCS3.1下编译后_c_int00固定在地址0x3E8000的结果不一样,自己怀疑是这个原因造成程序引导失败,但不知道怎么解决?查资料说_c_int00在rst2800.lib中定义,尝试分别加载rst2800.lib和rst2800_ml.lib两种库结果都一样,为什么移植到CCS4.2编译后_c_int00地址变化了?移植后需要更改CMD文件吗?或是编译连接选项设置有问题吗?被这个问题困扰很久了,请大家帮帮忙吧,非常感谢!

回帖(5)

朱虹博

2018-11-8 11:46:43
楼主_c_int00在库文件中并没有指定位置所以变换位置并不奇怪,建议你的跳转入口地址设到codestart这类有指定位置的地方。或者你也可以把codestart指定到0x3E8000的位置。
举报

陈杰

2018-11-8 11:55:24
引用: Emily1225 发表于 2018-11-8 08:43
楼主_c_int00在库文件中并没有指定位置所以变换位置并不奇怪,建议你的跳转入口地址设到codestart这类有指定位置的地方。或者你也可以把codestart指定到0x3E8000的位置。

谢谢Forrest,我将codestart指定到0x3E8000后,程序可以顺利引导了。
另外再想请教个问题,CCS4下的hex2000和CCS3.1下的hex2000生成的二进制文件有区别不?我用原来编写的coff转换程序转换CCS4下生成的out文件好像有问题
举报

朱虹博

2018-11-8 12:14:11
引用: wenminglang 发表于 2018-11-8 08:52
谢谢Forrest,我将codestart指定到0x3E8000后,程序可以顺利引导了。
另外再想请教个问题,CCS4下的hex2000和CCS3.1下的hex2000生成的二进制文件有区别不?我用原来编写的coff转换程序转换CCS4下生成的out文件好像有问题

二个hex2000会有不同,因为hex2000是编译器的组成部分,CCSV3.1中的编译器很老,是几年前的,V4中的是最新的。
请以V4中的hex2000转换结果为准,如有问题可以拿到坛上讨论讨论。
举报

王明钊

2018-11-8 12:19:53
您好 能详细说说您是怎么实现的么   能留个联系方式 咱们交流下么
举报

更多回帖

发帖
×
20
完善资料,
赚取积分