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.

两个工程的.out文件合并成一个.out文件的方法

Other Parts Discussed in Thread: UNIFLASH, C2000WARE

亲爱的ti大神们:

      用28377d开发了app和bootload两个工程,分别存储在不同的flash扇区,但每回都要向产品里下载两回.out文件。为了省时省力,有没有将两个工程的.out文件合并成一个.out文件的方法。

1、该地址 http://processors.wiki.ti.com/index.php/Combining_executable_files 的官方说明有.out合并成.obj的方法,但不明白具体操作是怎样的,用到的The hex converter工具是什么?hex2000 boot.out app.out  --section_name_prefix="data" --load_image -o ROM_simple.obj指令放在哪里执行?

2、生成.obj文件之后,要如何生成.out文件?要自己编写cmd文件,再编译生成.out文件吗?

3、还有没有其他的合并方法呢?

  • 我的一个思路是,

    可以将其中的一个.out文件通过CCS转换成hex中的数据,然后把数据做成表格,如常量数据放在另一个工程里面,就可以生成统一的一个.out文件。

    Eric.

  • Eric Ma :
    您好,不太明白这种实现方法,"如常量数据放在另一个工程里面",是如何操作的呢?只需要右键add file..加载到工程里就行了吗?但表格是excel格式的,如何一起编译呢,您有没有具体操作的例程,不胜感激!
  • 做成一个常量的table放在头文件或是源文件里面。然后把这部分常量的表格定位在固定的地址,映射到你要的flash空间里面去。跟变量定义到某些地址一个道理。
    没有具体操作的例程,这个只是思路啦,这个只是思路。
    Eric
  • 我有一个办法,目前也正在用,将BootLoader和app一次性烧写进dsp中。

    这个软件叫C2Prog,它可以刷写Intel hex文件到dsp里面,而且速度非常快。

    我们在编译的时候直接生成intel hex文件,右键工程,Show Build Settings->C2000 Hex Utility,勾选Enable C2000 Hex Utility 在C2000 Hex Utility ->General Options中设置Specify memory width为16,Specify rom width为16。C2000 Hex Utility ->Output Format Options中的Output Format选择Output Intel hex format(--intel, -i),点击Apply and Close即可设置完成。

    把这两个工程生成的hex文件复制出来,直接用文本编辑器打开,他的格式是这样的

    RecordMark

    RecordLength

    LoadOffset

    RecordType

    Data

    Checksum

    记录标志

    记录长度

    装载偏移

    记录类型

    数据

    校验和

    其中,RecordMark字段其实就是每条记录的首部,其值为0x3A,在ASCII码中就是冒号“:”。该字段在HEX文件中,这个头部只占有一个字节。RecordLength表示每条记录包含的数据的长度,以字节为单位,最大描述255个字节,表现为2个16进制的字符,该字段在HEX文件中占2个字节。LoadOffset表示该记录中的数据在整个存取器空间中的偏移,用4个十六进制字符描述一个16位数据,在HEX文件中该字段占有4个字节。RecordType表示记录类型,表现为2个十六进制字符。取值有以下几种:

        00表示数据记录;

        01表示文件结束记录;

        02描述拓展段地址记录;

        03描述开始段地址记录;

        04描述扩展线性地址记录;

        05描述开始线性地址记录。

    看到这段描述,我想你应该知道什么意思了。

    根据地址每行数据的地址,将BootLoader与app的hex文件的数据复制进去。
    由于在一开始我们已经设计好BootLoader和app的地址。一般情况下,先粘贴BootLoader的hex文件,将最后一行文件结束记录删除,再粘贴用户程序的hex文件,保存,即可完成烧写文件的制作。

    然后直接用C2PROG烧写进去就行了,一次完成,速度贼快!

    最后看到你做了bootloader,我其实想和你交流一下,我用BootLoader给app升级的时候,烧写的也是Intel hex文件,但是每烧写一行数据,我这里需要7ms,一个300多k的hex文件,写了快一分钟才完成,不知道你是怎么做的,我想把BootLoader升级时间缩短一点。

  • 感谢您的回复,受益匪浅,但公司默认还是使用ccs软件和xds200下载.out文件,但您的方法也不失为一个好办法,有很多学习借鉴之处。
    最近发现用UniFlash可以同时烧录两个.out文件(实验证明两个工程的存储空间互不干扰的话,生成的.out文件可以同时load),所以不合并也可以解决app和bootload下载两次的问题了。
    我的bootload文件之前使用比特率9600,烧写600多k的.txt二进制文件需要五分钟,后来提高波特率到115200,目前40多秒可完成烧录,但再继续提高比特率也不能缩短时间了。

  • 您好,我目前也在做28377D的bootloader程序,您的bootloader工程可以借鉴一下吗?
  • bootloader程序可以参考官方例程,在此基础上修改,路径为:C:\ti\c2000\C2000Ware_2_01_00_00\device_support\f2837xd\examples\dual\F2837xD_sci_flash_kernels\cpu01

  • 您好,请问合并app.hex与boot.hex的方法除了手动合并外,还有其他比较好的方法吗?比如通过mergeHEX.exe软件,bat脚本,双击就可以自动合并。目前手动合并出现过较多问题,在线升级不好做。谢谢!