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

