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

hex2000为啥生成了两个hex文件

我执行 hex2000 -map *.map -a *.out后生成了两个hex文件,一个叫*.a00一个叫*.a01我到底该用哪一个呢。

he yuanjie:

回复 Eric Ma:

你给我的工具生成的hex文件咋没指出这段程序是下载到哪个地址的。

终于看明白a00和a01原来一个是16位的高字节一个是16位的低字节,要把两个拼接起来才是一个完整的程序。

我执行 hex2000 -map *.map -a *.out后生成了两个hex文件,一个叫*.a00一个叫*.a01我到底该用哪一个呢。

Eric Ma:

回复 he yuanjie:

我给的那个.a00是用来SCI boot用的,SCI boot要有对应的格式。

你要用的hex文件是用来做什么的?

Eric

我执行 hex2000 -map *.map -a *.out后生成了两个hex文件,一个叫*.a00一个叫*.a01我到底该用哪一个呢。

he yuanjie:

回复 Eric Ma:

我自己写了个bootloader,实现通过网络更新应用程序的功能。

我执行 hex2000 -map *.map -a *.out后生成了两个hex文件,一个叫*.a00一个叫*.a01我到底该用哪一个呢。

Eric Ma:

回复 he yuanjie:

那通过CCS的post build step就可以产生ASCII的hex文件。

CCS3.3生成HEX

1.找到CCS3.3的安装目录。在C2000目录找到一个叫hex2000.exe的可执行文件。我是在下面这个目录下找到的,供您参考。C:\CCStudio_v3.3PLA\C2000\cgtools\bin 2.把要转的xxx.out文件拷到这个目录下。 3.在电脑上进入     start->run->cmd进入命令行窗口。用DOS命令进入hex2000.exe的安装目录。 hex2000 -romwidth 16 -memwidth 16 -i -o xxx.hex xxx.out就会在当前目录下生成一个叫xxx.hex的文件。

 

CCSv5生成HEX

1.在IDE中选择 菜单   project->propertise打开下面界面。 2.在左侧选中CCS Build 在右侧的选项卡中点击Steps 3.在最下方Apply Predefined Step选中 Create flash image: Intel-HEX 4.在编译的时候会自动生成一个xxx.hex文件。

如果要改成ASCII的hex文件,只要修改上面的命令行-i 改成-a

Eric

我执行 hex2000 -map *.map -a *.out后生成了两个hex文件,一个叫*.a00一个叫*.a01我到底该用哪一个呢。

xiansheng qian:

回复 Eric Ma:

您好,请教您一个问题。我也想把.out转换成.hex文件,用做串口在线升级用。

您说的:“hex2000 -romwidth 16 -memwidth 16 -i -o xxx.hex xxx.out”,里面好像没有输入与.out文件对应的.map文件?

而且是不是还得通过 -e 输入指引导完成后,程序开始执行的入口地址?

还想请教一下就是关于hex文件的格式问题,比如ASCII格式,S-motorola格式等,这些不同的格式对在线升级有程序有什么影响?

 

我执行 hex2000 -map *.map -a *.out后生成了两个hex文件,一个叫*.a00一个叫*.a01我到底该用哪一个呢。

Eric Ma:

回复 xiansheng qian:

xiansheng,

在命令行上增加一句 -map epwm_adc_soc.map

程序开始执行的入口地址?我认为不用。

你所需要的就是将.out文件转换成hex文件,hex文件即使对应flash地址要烧写的内容,只要把这些内容烧写进去就可以了。

至于ASCII格式或是Intel格式,这些里面都还有包含一些地址信息,或是其他符号,你需要通过上位机解析出来,哪个地址烧写什么数据,然后通过串口和芯片上的升级程序通信,将这些信息传送给芯片上的升级代码,升级代码调用flash API,烧写对应的地址。

所以上位机以及芯片上的升级代码配合起来就是CCS的烧写功能。

Eric

我执行 hex2000 -map *.map -a *.out后生成了两个hex文件,一个叫*.a00一个叫*.a01我到底该用哪一个呢。

xiansheng qian:

回复 Eric Ma:

好的,谢谢您的指点,以后在做的过程中有问题再向您请教!

我执行 hex2000 -map *.map -a *.out后生成了两个hex文件,一个叫*.a00一个叫*.a01我到底该用哪一个呢。

nvshi li:

回复 he yuanjie:

楼主您好!

    a00和a01如果拼接啊?怎么下载,a00和a01里面都有校验和,如果处理啊?

我执行 hex2000 -map *.map -a *.out后生成了两个hex文件,一个叫*.a00一个叫*.a01我到底该用哪一个呢。

he yuanjie:

回复 nvshi li:

举个例,比如有两个数为0x1122、0x3344那么a00文件中存的是22 44,a01文件中存的是 11 33。你把这些字符转化为数字,a01的左移8位和a00的相与就可以了。

/* 十六进制字符串转换为整数 */static unsigned long htoi(char *str, unsigned *end){    int i, n = 0;    unsigned long tmp = 0;

    for (i = 0; i < 8; i ++)    {        if ((str[i] >= 'A') && (str[i] <= 'F'))        {            n = str[i] – 'A' + 10;        }        else if ((str[i] >= 'a') && (str[i] <= 'f'))        {            n = str[i] – 'a' + 10;        }        else if ((str[i] >= '0') && (str[i] <= '9'))        {            n = str[i] – '0';        }        else        {            break;        }

        tmp = tmp * 16 + n;    }

    if (end != NULL)        *end = i + 1;

    return tmp;}

这是转换程序,end会指出在遇到第几个字符转化结束。比如 char *str = "A2 3D 4C"那么转换结果为162,遇到A2后面的空格结束*end = 3。

 

赞(0)
未经允许不得转载:TI中文支持网 » hex2000为啥生成了两个hex文件
分享到: 更多 (0)