Chinaunix首页 | 论坛 | 博客
  • 博客访问: 772941
  • 博文数量: 215
  • 博客积分: 291
  • 博客等级: 二等列兵
  • 技术积分: 1031
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-12 18:17
文章分类

全部博文(215)

文章存档

2016年(16)

2015年(16)

2014年(123)

2013年(60)

分类: 嵌入式

2015-02-15 17:07:06

TI的ccs默认生成的是.out格式的文件,而很多应用场合往往需要的是纯二进制代码,TI提供了一个小工具HEX2000能帮助实现格式的转化,具体的说明还是请参看TMS320C28x Assembly Language Tools手册。这里简单的说明下该工具的使用:
1.hex2000是在ccs安装目录下的。

2.hex2000 转化工具支持多种输出格式,至于用那种格式,通常是由所用的烧写器来决定的。常见的有:
Ascii hex: 这种格式其实是会将所有的code转化为字符形式,比如本来的0x3132, 它就用'3' '1' '3' '2'来表示,当中有空格,这种格式比较使用通过串口等工具来更新数据。
binary:-b 选项,纯二进制格式。它还支持intel,motorola-s, ti-tagged, tektronix等格式。

3.hex2000 有memory width的概念,输入文件的(--memwidth),一般来说都是16bit的(因为编译出来就是这样的),输出格式--romwidth,可以指定为8或者16(有些格式不支持16)。如果输入16,输出是8,hex工具会自动生成两个文件,一个放低8位的数据,一个放高8位的数据。当然你也可以自己制定这两个文件的名字。

4.你也可以指定输出文件的字节顺序,默认是little-endian,也可以通过-order LD和-order MS来指定大小端顺序。

5. -image选项:打开该选项,系统会产生一个和你在roms中指定大小一样的文件,不足部分用fill的值来替代。如果没有用该选项,系统只会产生一个实际大小的文件,比如你想要的空间是0x300000-0x330000,但这里面只有0x300000-0x310000空间有数据,那系统只会产生这部分的数据,后面部分不会填0;同事如果不使用-image选项,那如果0x300000-0x330000中仅有两个数据块,且这两个数据不连接,不适用该选项则会出现一个压缩的数据块,且仅有这两个数据块和的outfile。

6.hex2000工具,可以通过命令行通过一句话将所有的参数和输入输出写在一起来运行,比如:hex2000 -t firmware -o firm.lsb -o firm.msb
也可以通过ROMS指令写一个脚本文件,这种脚本文件的好处是可以编写比较复杂的要求,而且易于修改。下面是我的一个参考例子:
  1. mcbsp_sd_demo.out
  2. -image
  3. --memwidth 16
  4. --map mcbsp_sd_demo.map
  5. --order=LS
  6. -b
  7. -fill FFFFh
  8. ROMS
  9. {
  10. TEXT: org = 0x00600000, len = 0x2800, romwidth = 8
  11. files = {mcbsp.bin}
  12. }


不知道是不是由于我要输出8位而源文件是16位,这里的org其实是0x300000,但是写这个一直不对,只有填成两倍才可以。注意这里的长度是byte。
阅读(1248) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~