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.

[参考译文] 编译器:C2000编译器6.2 .........0/STS.STS 17.3 代码大小问题

Guru**** 2337880 points
Other Parts Discussed in Thread: TMS320F2812
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/618994/compiler-c2000-compilers-6-2-0-17-3-0-sts-code-size-issue

主题中讨论的其他部件:TMS320F2812

工具/软件:TI C/C++编译器

大家好

TL:DR:具有最高优化的新编译器生成的ASM代码比旧编译器大得多。

我的问题是关于代码的大小,它是由两个不同的编译器产生的。  我们有一个非常大的TMS320F2812 MCU项目。 到目前为止,这个项目已经开发了几年,规模越来越大,从3.3 迁移到CCSv5等等。 该项目利用MCU可用内存的95 %。  

问题是,此项目是使用C/C++编译器6.2 v.0构建的。 我在这个论坛上发现,强烈建议不要使用它,所以我决定使用v 17.3 0 STS构建它。 但由于代码大小增加,构建失败。 我尝试更改优化级别,并为 代码大小设置最高优先级的最大优化-这没有帮助。 遗憾的是,我不熟悉汇编程序语言,因此无法对生成的代码进行良好的分析。

我比较了.map-files并选择了代码大小不同的.obj-file。 我已使用不同的优化级别对其进行了编译。 但是,6.2 0的非优化代码似乎仍然小于17.3 .0的高优化代码。  

以下是源代码的某些行和生成的ASM文件。 是否有人可以检查这些文件? 也许我应该打开一些其他选项? 我还为这些文件提供编译器调用。

屏幕截图函数的源代码:

void dlog_background_analizer (TDataLog *p){p->trig_shift_int
	=(p->trig_shift&0xFFFFFF)>16;
	if (p->trig_shift_int >255)	
		p->trig_shift_int =255;

	tco_OdVars *p_vars *p_mode_3f=&cot;
	<p_mode_for_1;

	ipnum_mode;<=<p_fortrars=1;
		

	<=<p_<=<=<=<=<=<p_getp_getp_<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=
		

	
		
			
	如果(p->control &2)
		IF (!(p->dlog_iptr2 =(type_data*) co_getAddr(p-vars, p->_subind2))
			p->dlog_iptr2 =(type_data*)&p->ind_subind;if (p-_p_indrind_subindr2;4
	=
		
			
	
		
			(p-=) p_modr_iptrars;<-<) p_modr_iptradr=4=(p_modr_ipr; ipr_modr=4)ipdr_ipdr_ipr; ipdr_ipr;<-<-<-<-<-<) ipr_iptrad_modr=4-<-<-<-<-<-<-<) iptrad_log_log_iptrad_log_iptrad_iptrad_modr=4-<=(p-<=(p_iptrad_modr=4)p_iptrad_iptrad_iptrars=(p-<-<-<-<-<)
	<=(p_iptrad_
	模式=(p->control >>4)和3;
	p->control =0;
	dlog_set_mode(mode, p);
} 

e2e.ti.com/.../v6.2.0.asme2e.ti.com/.../v17.3.0.asm

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    了解当前情况的唯一方法是自己重现这些结果。  为此,我们需要一个测试案例。

    Disona 说:
    我比较了.map-files并选择了代码大小不同的.obj-file。

    很好。  对于该源文件,请按照文章 How to Submit a Compiler Test Case中的说明进行操作

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,George

    很抱歉回复太晚。 预处理文件位于pastebin: https://pastebin.com/m6twVGvs中

    6.2 .0的编译器选项:  

    "C:/ti/ccsv7/tools/compiler/ti-CGT-CPP_C2000 6.2 .0/bin/cl2000"-v28 -ml -mt -O2 --include_path="C:/ti/ccsv7/tools/compiler/ti-CGT-cpp_ccp_model.0/include" 6.2 --include_path="./include"-dav_model_cru_cru_v-v-ful_cruel_cruel_cruel_cruel.0/reate_model="-v-v-f_cruel_cruel_cruel="-v-f_cruel="-f="-f_m_-fulf_m_-fulf_-fulf_-fulf_-fulfulf_-"-ful_-v-fund_cruel="-"-cru_re_  

    17.3 .0的编译器选项:

    c:\ti/ccsv7/tools/compiler/ti-CGT-ccpp_compiler.0.sts/bin/cl2000" 17.3 -v28 -ml -mt -Ooff --opt_for _speed=0 --include_path="C:/ti/Cpsvsv7/tools/compiler/ti-CGT-CGT-define 17.3 .0.0.0.0.dime/include="-fall_fault_fack_prox_-fcc_fcc_prox_-fcc_fcc_-fcc_fccp_fccp_fccp_fault-fccp_fcc_fccp_-fcc_fcc_fcc_fcc_fccp_fccp=-fccp_fault-fulate_model_cruel_cruel_cruel_fulfulfcc_fcc_fcc_fulfault-fcc_-fcc_cruel_-fcc_fcc_cruel_fulfcc_  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉,我无法访问pastebin.com。  请将文件附加到下一篇文章中,如 文章 How to Submit a Compiler Test Case标题为Attach Preprocessed File to a Forum Post的子部分所述。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的,George,文件已附加。

    e2e.ti.com/.../V_5F00_data_5F00_log.pp.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您告知我们有关该问题的信息,并提交测试案例。  我可以重现代码大小的增加。  我在 SDOWP系统中提交了CodeGen-3673以对此进行调查。  欢迎您使用我签名中下面的SDOWP链接进行关注。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请尝试使用C2000 CGT v 17.9 .0.STS,查看问题是否已解决。  

    谢谢!

    Anna

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您发送更新通知。

    我试过17.9 …………………………………………………………………………… 当“大小/速度”折衷设置为1或2时,可以编译项目,因此代码适合可用内存。 但是,6.2 0仍然显示出更好的性能结果-比较是通过测量两个项目(使用不同的编译器构建)中的ISR持续时间来执行的。

    您能否提供已解决的问题的一些详细信息? 我在编译器描述中找不到代码生成-3673问题关闭,但最相似的关闭缺陷是代码生成-2343。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,我认为相关的修复程序是Codegen-2343。  这是首先出现在v 16.9 .5.LTS和17.9 .0.STS中。

    请提供更详细的性能降级信息。  您正在比较哪些设置,哪些函数显示降级,百分比降级等。 如果使用尺寸-速度折衷值3,代码是否不再适合可用内存?  默认设置为2。

    根据我们的测试,17.9 .0.STS实际上比6.2 .0稍稍改进了代码大小--你们也看到了吗?  以下是我们的工程师在示例测试案例中获得的代码大小数字:

    "data_log_update",0x0.0001万f,12.6263万 0x0万
    "dlog_background_analizer",0x0万,0x0万 8.5133万
    "dlog_set_mode",,0x0万,0x0.0001万f,31  

    我将关闭代码大小问题,但如果存在明显的差距,我们可以打开一个新的性能问题。  版本之间的一些细微波动是不可避免的。

    谢谢!

    Anna

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,您可以关闭该问题。 当我有机会将具有不同设置的新编译器与旧的编译器进行比较时,我会这样做并为您提供信息。 谢谢你。