Jak jsem si nabehnul aneb double v pacalu na AVR
Jan Waclawek
konfera na efton.sk
Úterý Červenec 22 07:57:45 CEST 2014
> Ta celociselna varianta je asi 4060 cyklov, ta s double asi 27000 s
> WinAVR20100110 (t.j. avr-gcc 4.3.3).
Skusil som aj variantu s nativnym int64_t, a vysla mi na asi 5300 cyklov.
Ale mozno som niekde zbytocnou paranoiou rozsiril nejaku premennu viac, nez
bolo nutne.
wek
uint32_t calcPressure1(uint32_t d1, uint32_t d2, uint16_t c1, uint16_t c2,
uint16_t c3, uint16_t c4, uint16_t c5, uint16_t c6)
__attribute__((noinline));
uint32_t calcPressure1(uint32_t d1, uint32_t d2, uint16_t c1, uint16_t c2,
uint16_t c3, uint16_t c4, uint16_t c5, uint16_t c6) {
int32_t dT;
int64_t OFF;
int64_t SENS;
uint32_t P;
dT = (int32_t)d2 - ((int32_t)c5 SHL 8);
OFF = ((uint32_t)c2 SHL 16) + ((int64_t)dT * c4) / (1 SHL 7);
SENS = ((uint32_t)c1 SHL 15) + ((int64_t)dT * c3) / (1 SHL 8);
P = (((d1 * SENS) / (1L SHL 21) - OFF) / (1L SHL 15));
return P;
}
Další informace o konferenci Hw-list