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.

CCS V3.3.83.20 编译问题

Other Parts Discussed in Thread: TMS320F2808

以前一直使用CCS V3.3.81.6来编译TMS320F2808的代码,一切都很正常。

前些时间因为新项目要使用TMS320F2803x,所以更新到了CCS V3.3.83.20。最近由于TMS320F2808的代码有了些变更,使用这个V3.3.83.20版本编译后机器运行不正常,但是相同的project(什么都不变),直接使用CCS V3.3.81.6编译后机器运行完全正常。

对比map文件(见附件),发现v3.3.83.20比v3.3.81.6似乎优化更好一些,flash ram占用都少一些,但是为什么确有问题呢?

编译器选项里面选择了“全符号调试”和函数级优化-o2.

  • 两个建议:

    1、在build option里使能生成listing文件,在debug文件夹下可以找到两种不同情况下生成的文件,然后进行汇编对比,看看问题出在哪里。

    2、在CCS的help菜单about选项下,可以看到code generation tools的版本号,由你描述的问题来看,这两个不同CCS版本默认自带的编译器版本应该是不同的,只要将它们改成一样,理论上应该就可以了。具体方法是点击打开后面的component manager,进去后在build tools下找到编译器勾选,保存退出后重启CCS.

    如果使用v4或v5,则不需要进行这一步,因为不同的工程项目可以分别设置选用哪个编译器进行编译。

  • 开始以为是没有勾选 Unified Memory Model 选项导致的,发现也不是这个原因。

  • 同学,我上面回复得那么清楚,是你没仔细看呢,还是我写得有问题?

    简单来说,跟CCS一点关系没有,只是编译器(code generation tools)版本不同导致的,具体原因你可以看编译器的release note看看编译器到底有什么不同,直接到你的程序,就是生成listing file进行比较。

  • 查找到产生异常的代码变更也仅仅是从原来的“if(x==A)"变成了"if((x==A) || (x==B) )这样的形式。但使用CGT5.2.1编译时去掉一些原来函数前有ramfunc标识则编译后的代码也能正常跑。更新CGT后问题已解决,发现相同的代码,编译结果如下:

    CGT 4.1.3 - OK

    CGT5.0.0 - OK

    CGT 5.2.1 - NG

    CGT 5.2.14 - OK

    没有试更多了,但是CGT 5.2.14似乎也并不是完美无缺,我把尽量多的代码加入ramfunc标识后还是出现相同的问题 - 但显然已无法对比了,因为CGT4.1.3编译的结果是ramfunc空间不足以容纳代码--优化能力还是不如CGT5.2.1.

    决定还是回到CGT4.1.3。

  • 所以可以确定是编译器导致的问题,更换回原来的应该可以解决。

    问题是,如果你确实需要了解为什么或差别在哪,两个建议:

    1、你个人对比一下两个不同编译器的不同,下载时的release note会有详细说明,你可以将它里面的东西与你的程序对应起来;

    2、将你的程序简化至能复现问题,打包发出来拿去给TI的编译器开发人员分析一下。