Hallo Leute!
Habe folgende kleine Funktion geschrieben:
1 | void resistance_calc(uint16_t rise_time, uint16_t fall_time, float cap, uint16_t *resistance)
|
2 | {
|
3 | const float ln=2.1972246;
|
4 |
|
5 | resistance[0]= round((float)rise_time/(cap*0.001*ln));
|
6 | resistance[1]= round((float)fall_time/(cap*0.001*ln));
|
7 | }
|
Berechne hiermit die Rise- und Fall-Time eines Rechtecksignals, welches
durch ein RS-Glied gejagt wird.
Mein Problem ist nun, dass die Float-Operationen den Speicherbedarf
extrem belasten. AVR-Studio zeigt mir für diese kleine Funktion (wenn
sie in der main mit Parametern ausgeführt wird) eine ca 13%-ige
Belastung des Programm- als auch des Datenspeichers. Das sind einmal
4042 Bytes und einaml 264 Bytes. Arbeite mit einem Atmega32. Es liegt
eindeutig an Floatoperationen, denn sobald ich ganze Zahlen einsetze
geht die Auslastung auf 0.5% zurück.(Datentypen hierbei auf int gesetzt)
Gaukelt mir das Programm da was vor mit den Speicherangaben oder ist
solch eine Rechnung wirklch so "umständlich" für den Controller?
Habt ihr vielleicht Verbesserungsvorschläge um den Speicherbedarf zu
reduzieren? Da soll ja noch wesentlich mehr auf den Controller drauf...
Vielen Dank!!