Hallo.
Vorneweg: µC-Anfänger
Software:
AVR Studio 4.13.571 Service Pack 2
AvrPluginavrgccplugin 1, 0, 0, 9 (WinAVR-20071221)
Mit dieser Ausstattung versuche ich untenstehenden Code zu compilieren,
jedoch kommt dabei eine viel zu große Datei heraus.
An welcher falschen Einstellungen könnte es liegen?
Vielen Dank für eure Hilfe.
mfg
julian
_delay_ms(zeit);// Entladezeit zeit_ms (1500 µs) - je
Die Delay Zeit ist keine Konstante. Dadurch ist es dem Optimizer
nicht mehr möglich die Berechnung komplett zu optimieren und
du ziehst dir damit die komplette Floating Point Library ins
Programm hinein.
ersetzte das durch
Hallo,
ich hab eine ähnliches Problem.
Ich verwende AVR Studio 4.12.490 Service Pack 3 (WinAVR 20060421)
und bei mir wird die die selbe Warnung angezeigt. Der Fehler trat erst
auf, als ich in mein Programm die stdlib.h eingefügt habe und diese für
die Ausgabe einer Float-Variabel verwendet habe. Das Programm wird viel
zu groß und passt gar nicht mehr auf den Atmega8 drauf.
1
2
#include<avr/delay.h>
3
#include<avr/io.h>
4
#include"definitions.h"
5
#include"stdlib.h"
6
.
7
.
8
.
9
voidwert_send(void)
10
{
11
unsignedshorti;
12
floata;
13
chars[8];
14
i=start_adc();
15
a=i*0,0025;
16
dtostrf(a,5,3,s);
17
lcd_string(s);
18
}
19
20
21
22
voidlcd_string(char*data)
23
{
24
while(*data){
25
data_send(*data);
26
data++;
27
}
28
}
Ich hoffe, ihr könnt mir helfen.
Vielen Danke schonmal im Voraus.
Christoph wrote:
> auf, als ich in mein Programm die stdlib.h eingefügt habe und diese für> die Ausgabe einer Float-Variabel verwendet habe.
Da haben wir's doch schon.
Du ziehst dir die komplette Floating Point Library rein und die
braucht eben Platz.
-> Auf floating point verzichten und auf Fixkomma umsteigen.
Christoph wrote:
> Der Fehler trat erst> auf, als ich in mein Programm die stdlib.h eingefügt habe und diese für> die Ausgabe einer Float-Variabel verwendet habe. Das Programm wird viel> zu groß und passt gar nicht mehr auf den Atmega8 drauf.
Tja, die Floating Point Lib ist nun mal so groß. Versuche, mit
Integer-Arithmetik auszukommen...
Hallo,
vielen Danke für die schnelle Antwort. Ich werde mich dann wohl
demnächst mit den zwei genannten Methoden beschäftigen müssen. Nochmal
vielen Dank.
Gruß Christoph
In deinem Fall würde es sich anbieten, einfach die Berechnung * 10000
zu machen und dafür bei der Ausgabe an der 10000-er STelle das Komma
einzuschmuggeln
1
voidwert_send(void)
2
{
3
unsignedshorti;
4
inta;
5
chars[10];
6
7
i=start_adc();
8
a=i*25;
9
sprintf(s,"%d.%04d",a/10000,a%10000);
10
lcd_string(s);
11
}
sprintf ist zwar teuer, weil es eine eierlegende Wollmilchsau
ist, aber wenn sich das vom Platz her noch ausgeht, warum nicht?
Wenn das immer noch zu gross ist, dann müsste man einen Ersatz
für sprintf schreiben.
Hallo,
Sprintf hat recht gut funktioniert. Ich bin jetzt bei 6,22Kbyte. Das ist
zwar noch recht groß, geht aber auf den Atmega drauf und reicht für den
Zweck aus^^. Vielen, vielen Dank für die Hilfe, Karl Heinz.