本帖最后由 飞驰的蜗牛 于 2016-4-25 15:33 编辑
关于dspic的单片机 在使用汇编和C语言做乘法发现其结果不一样(AN1078代码)
汇编代码是_CalcOmegaFltred:
CalcOmegaFltred:
mov _smc1+SMC_OmegaFltred, W0
mov _smc1+SMC_Omega, W4
mov _smc1+SMC_FiltOmCoef, W5
lac W0, A
mpy W4*W5, B
add A
mov _smc1+SMC_OmegaFltred, W4
mpy W4*W5, B
neg B
add A
sac.r A, #0, W0
mov W0, _smc1+SMC_OmegaFltred
而我改写成C代码
void CalcOmegaFiltred(SMC *s)
{
SFRAC16 data1=0;
SFRAC16 data2=0;
data1=s->Omega * s->FiltOmCoef;
data2=data1+s->OmegaFltred;
data1=s->FiltOmCoef ,*s->OmegaFltred;
s->OmegaFltred= data2-data1;
}
则发现C代码完全无法使用, 则发现是 sac指令导致截取累加器A的不同位造成的,如果不使用内嵌乘法__builtin_mpy(),指令,如何改造这个C代码使其能够正常工作,请大神指导下
|