Momentan schreibe ich eine Funktion, zur barometrischen Höhenberechnung
in einem Modellflugzeug. Das ganze erhält seine Messwerte aus einem
Bosch BMP085-Sensor und läuft auf einem STM32F100RB mit 24 MHz.
Die Berechnung läuft auch hervorragend, dauert aber aufgrund der
pow()-Funktion verhältnissmäßig lange...
1 | /* calculate altitude in 0.1 m */
|
2 | B8 = (double)envPressure * 9.869232667e-006; // 9.87e-6 = 1 / 101325 Pa
|
3 | B8 = pow(B8, 0.19029495718363465);
|
4 | altitudeAMSL = (int32_t)(443307.6923 * (1.0 - B8));
|
Allein die pow()-Funktion benötigt ca. 268 µs zur Ausführung!
(der µC besitzt leider kein float-Rechenwerk)
Die restlichen Berechnungen von Temperatur, Druck, Höhe und
Mittelwertbildung benötigen lediglich 20 µs.
Nun sollen nebenbei noch eine ganze Menge trigonometrische Berechnungen
von float-Werten durchgeführt werden, weshalb ich mir nicht sicher bin,
ob die Rechenzeit irgendwann knapp wird...
Kennt jemand eine effizientere Funktionssammlung für ARM32-Prozessoren?
(sin, cos, tan, pow)