Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
Такая вот функция не работает при уровне оптимизации выше 6.
__ramfunc __arm S32 TDTMFDecoder::CalcFilter(S32 a1)
{S32 D0 = 0;
S32 D1 = 0;
S32 D2 = 0;S16 *pData = &pDataBuffer[DataBufferIndex & 0xFF];
for(U32 i = 0; i < GOERTZEL_POINT; i++)
{
S32 data = *pData++;D0 = (a1 * D1)>>M;
D0 +=data;
D0 -= D2;D2 = D1;
D1 = D0;
}return(D1 * D1 + D2 * D2 - (((D2 * D1>>8) * a1)>>(M-8)));
}
но если заменить S32 data = *pData++; на S32 data = pData[i]; то все работает при любом уровне оптимизации.