①在DSP 2809中,我有以下执行语句:
long VinActualValue=3000;
int FixedDutyValue=361;
int VoutCalValue=0;
VoutCalValue=(VinActualValue*FixedDutyValue)/1000;
请问DSP在执行此条语句"VoutCalValue=(VinActualValue*FixedDutyValue)/1000;"时的顺序是什么呢?我能确定(VinActualValue*FixedDutyValue)/1000的值不超过int的长度.
猜想一:VoutCalValue=VinActualValue*FixedDutyValue;(int型乘以long型,会强制把int型转换成long型(正确否?),此条语句执行导致数据溢出)
VoutCalValue=VoutCalValue/1000;(运行结果出错)
猜想二:Temp=VinActualValue*FixedDutyValue;(Temp是DSP临时为语句执行分配的一个long型变量)
VoutCalValue=Temp/1000;(运行结果正确)
Martin Yu:
①在DSP 2809中,我有以下执行语句:
long VinActualValue=3000;
int FixedDutyValue=361;
int VoutCalValue=0;
VoutCalValue=(VinActualValue*FixedDutyValue)/1000;
请问DSP在执行此条语句"VoutCalValue=(VinActualValue*FixedDutyValue)/1000;"时的顺序是什么呢?我能确定(VinActualValue*FixedDutyValue)/1000的值不超过int的长度.
猜想一:VoutCalValue=VinActualValue*FixedDutyValue;(int型乘以long型,会强制把int型转换成long型(正确否?),此条语句执行导致数据溢出)
VoutCalValue=VoutCalValue/1000;(运行结果出错)
猜想二:Temp=VinActualValue*FixedDutyValue;(Temp是DSP临时为语句执行分配的一个long型变量)
VoutCalValue=Temp/1000;(运行结果正确)
Harry xie1:
回复 Martin Yu:
Martin Yu老师,汇编我忘了,还是看不懂呢。
意思是说VoutCalValue=(VinActualValue*FixedDutyValue)/1000.意思是不是在执行VinActualValue*FixedDutyValue时,把结果放到ACC中,从而不会溢出.
故可以说:
ong VinActualValue=3000;
int FixedDutyValue=361;
int VoutCalValue=0;
VoutCalValue=(VinActualValue*FixedDutyValue)/1000;
它的执行结果不会出错。可以在程序中使用吧?
①在DSP 2809中,我有以下执行语句:
long VinActualValue=3000;
int FixedDutyValue=361;
int VoutCalValue=0;
VoutCalValue=(VinActualValue*FixedDutyValue)/1000;
请问DSP在执行此条语句"VoutCalValue=(VinActualValue*FixedDutyValue)/1000;"时的顺序是什么呢?我能确定(VinActualValue*FixedDutyValue)/1000的值不超过int的长度.
猜想一:VoutCalValue=VinActualValue*FixedDutyValue;(int型乘以long型,会强制把int型转换成long型(正确否?),此条语句执行导致数据溢出)
VoutCalValue=VoutCalValue/1000;(运行结果出错)
猜想二:Temp=VinActualValue*FixedDutyValue;(Temp是DSP临时为语句执行分配的一个long型变量)
VoutCalValue=Temp/1000;(运行结果正确)
Harry xie1:
回复 Martin Yu:
嗯,懂了,它中间结果是存在累加器里面.所以不会溢出。最终结果才从累加器赋值到VoutCalValue.