使用CCSv12为C2000生成.bin文件和.hex文件
前言
一般情况下使用CCS生成的.out文件搭配仿真器就可以升级C2000的程序,但如果想要使用串口或者CAN实现程序在线升级,则往往需要目标代码生成的.bin文件。本文将介绍如何使用CCSv12生成工程的.bin文件。
问题描述
笔者尝试了网络上流传了许多使用CCS生成.bin的方法,也使用过TI官方tiobj2bin.bat中的命令,但经过实操过后要么根本就不会生成.bin文件,要么会出现“‘C:’ 不是内部或外部命令,也不是可运行的程序或批处理文件”的报错。
解决方案
首先给出本文参考的解决方案:
优快云:CCS 10.3.1版本生成.bin文件
知乎:CCS如何生成hex和bin文件
各种方式都是围绕"${CCS_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin" "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" "${CG_TOOL_ROOT}/bin/ofd2000" "${CG_TOOL_ROOT}/bin/hex2000" "${CCS_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin"
这一命令展开,但不同的CCS版本在配置上有所不同,下面将以CCSv12.2和DSP28335为例,详细介绍如何生成.bin文件。
关于那一长串代码
这段代码看起来有点像使用Shell脚本或者Windows终端的语句,但笔者对此不太熟,将简单介绍一下大概是什么东西,以便针对不同的芯片架构去使用。
其实每一个分号里面都指向的是某个地址下的某个文件(可以不用管,但需要知道这个绝对地址在哪)。以${CCS_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin
为例,这段代码实际上指向的是一个.bat文件,前面用花括号引用的内容是CCS的安装地址,具体看截图:
类似的,后面的"${BuildArtifactFileName}"
应该是指当前工程的名字,可以不用管;"${BuildArtifactFileBaseName}.bin"
应该是指要生成的.bin文件的名字,也可以不用管。后面三个分别是需要调用的几个工具,可以在CCS的安装目录下面找到,分别如下图所示:
直接复制网上流传的代码为什么不行
笔者在实际操作过程中遇到过两个问题,第一个问题是只生成.bin而不生成.bin文件,这个问题笔者猜测可能是CCS版本不太一样;第二个问题就比较奇怪了,编译器报错:“‘C:’ 不是内部或外部命令,也不是可运行的程序或批处理文件”,这个报错的解决才有了这篇文章。
如何解决
第一步:先将生成hex文件的选项打开,CCS12里面按照下面的三个步骤进行:打开hex生成的选项、指定hex的格式、指定位宽和大小端,如下图:
第二步:在下图位置复制这段代码:"C:\ti\ccs1220\ccs\utils\tiobj2bin\tiobj2bin" "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" "C:\ti\ccs1220\ccs\tools\compiler\ti-cgt-c2000_22.6.0.LTS\bin\ofd2000" "C:\ti\ccs1220\ccs\tools\compiler\ti-cgt-c2000_22.6.0.LTS\bin\hex2000" "C:\ti\ccs1220\ccs\utils\tiobj2bin\mkhex4bin"
。这个就是把那一长串里面几个文件的地址换成了绝对地址,这样做CCS就不会报无法识别"C:"的错误了。
注意事项
- 最好在每次编译之前把生成的.hex和.bin都删除,不然编译器可能不会做任何事情(猜测可能是和makefile中的clean有关);
- 最好不要只生成bin文件,因为笔者只生成bin文件时编译器没有做任何事情,而且同时生成hex和bin有助于对照和后续烧写;
- 每个人CCS安装路径有所不同,在使用直接地址时不要直接复制文中的代码。