工具/软件: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); }