PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Multiplikationen bei Bascom..



nowayz
18.01.2009, 17:57
Hallo zusammen,

Ich bin gerade an meinem ersten richtigen Projekt und bin nun auf ein Problem gestoßen.

Ich habe momentan noch die Demoversion von bascom-avr und wenn ich meinen code normal compiliere hat er eine größe von ca. 3,5kByte.
Wenn ich nun noch eine ganz simple Multiplikation einbaue:
A = 0,23 * B
sprengt der Code die 4kB-Grenze der Demo.

Ist das normal, dass Multiplikationen so viel Speicher benötigen?
Eigentlich benötige ich für mein endgültiges Projekt auch komplexere Funktionen (e-Funktionen usw...), aber das würde dann sogar mit der Vollversion eng, da mein AtMega8 einen Speicher von 8kB hat.
Allerdings habe ich noch einen externen EEPROM, kann ich da vielleicht Funktionen auslager oder so?


Vielen Dank!

Easter
18.01.2009, 18:22
Schreib mal :

A= B/100
A = A*23

Und poste mal was dann rauskommt an Größe.

Vitis
18.01.2009, 22:36
Fließkommaarithmetik braucht ne Menge Code
und auch ne Menge Rechenzeit, daher versucht man
die möglichst zu vermeiden ... schau mal ob nicht
a = b/4 auch reicht
oder wenns ganz kurz werden soll shift B,right,2

for_ro
18.01.2009, 22:54
Schreib mal :

A= B/100
A = A*23

Und poste mal was dann rauskommt an Größe.

Wenn er nur Ganzzahl verwendet, wird sich die Codegröße nicht ändern.
Aber durch deine Art zu rechnen wird das Ergebnis ziemlich ungenau. Besser ist es immer, wenn du zuerst multiplizierst und dann dividierst. Also

A = B * 23
A = A / 100

Für z.B. B=40 sollte dabei 9,2 (Ganzzahl 9) rauskommen. Bei dir käme 0 raus, in der umgedrehten Form ist A=9.
Der Nachteil ist dabei nur, dass die Zahlen evtl. größer werden, als für den verwendeten Typ erlaubt. Dann muss man auf den nächst größeren gehen.

Gruß

Rolf

MrNiemand
18.01.2009, 23:18
übrigens scheint Bascom Comiler laut simulator automatisch Sachen wie *2,/2, *4,/4 durch shift zu ersetzten, denn das Ergebniss der benötigten Befehle war das selbe.