Part Number:TMS320F280039
TMS320F28003x 平台已有可以正常使用的源工程A,在源工程A上建立项目分支B与开发分支C。
现在在开发分支C上已经实现了boot安全启动,单独测试开发分支C是OK的。
现在将开发分支C集成到项目分支B上,B编译的hex无法跑起来,但是C编译的hex可以跑起来。
尝试过以开发分支C为基准,把项目分支B的代码移植到C上,编译生成的hex也跑不起来。
多次对比配置,未找到问题
对比C和B编译生成的文件,在bin文件的对比中找到异常:正常可以跑起来的hex,其bin文件大概在0x6exxx处有一段代码,看起来跟DCSM有关
但是不能跑起来的hex,bin文件相对于正常的bin文件,在前面塞了0x10000个字节,并且首地址为跟DCSM 相关的代码
大概示意如下:
正常bin:
0x00000 aa bb cc dd
……
0x6exxx dd cc ss mm
不正常的bin:
0x00000 dd cc ss mm
……
0x10000 aa bb cc dd
在对比了之后,尝试把代码部分一部分一部分移植
开发分支C:ok
移植了项目分支B的uds模块的开发分支C:不行 B的uds模块比C的usd模块代码量要更大
移植了分支B bsw 的开发分支C:ok
移植了分支B bsw 与一部分应用bsw的开发分支C:不行,增加代码部分大概是多开了个中断?
由于是内网开发,靠记忆整理过程,无法传代码,请见谅。
想问下有没有什么解决思路,谢谢。
Ben Qin:
你好,为了更好的解决您的问题,我将咨询TI资深相关工程师,一旦有回复会立即回复您。
,
Z JC:
问题已解决。在反复移植代码测试后发现,
问题1:0x80002~0x80010被安全启动模块使用,源工程有设置RESET_FILL固定为0xff,应去掉。
问题2:项目分支B中有部分函数放到TI.ramfunc中,在将这部分函数从TI.ramfunc移出测试OK,
反复测试后确认,在linkinfo.xml中,分支C的TI.ramfunc固定起始地址在0x80100,当放入TI.ramfunc的函数增长linkinfo.xml中TI.ramfunc的末尾超过0x81000时,发生bin文件生成异常的情况,而分支B的TI.ramfunc起始地址不固定,有0x85xxx以上,对比分支B与分支C的flash.cmd文件,将分支C中某个“RUN”的设置(RAMS3S7)与分支B(RAMGS)一致,此时分支C中TI.ramfunc中长度不影响bin文件生成异常,并且测试OK