www.mikrocontroller.net

Forum: Compiler & IDEs Rechnen oder Tabelle, was ist effektiver


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe einen Atmega und mein Ausgabewert in Abhängigkeit von der 
Eingabe kann ich mit folgender Formel darstellen:

y = 1000-7,85(x-3)+4,53(x-3)2-0.55(x-3)^3-0.02(x-3)^4

oder bereits fertig berechnet als Array für meine 120 
Eingabemöglichkeiten.

Was ist hier effektiver? Mein RAM ist ziemlich ausgelastet. Wie würdet 
ihr das Programmieren??

Danke,

Markus

Autor: Tishima (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich würd das Array im Flash ablegen und dann drauf zugreifen.

gruß,
Bjoern

Autor: jihm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[mäßig ot]
effektiv != effizient
effektivität guckt aufs ende
effizienz auf den weg
[/]

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, wenn ich das Array ins Flash stecke, würde es mich 240 int-Werte, 
also 480 Byte kosten.

Kann man auch sagen, wieviele Taktzyklen eine Berechnung kosten würde?

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Also, wenn ich das Array ins Flash stecke, würde es mich 240 int-Werte,
> also 480 Byte kosten.
>
> Kann man auch sagen, wieviele Taktzyklen eine Berechnung kosten würde?

Über den Daumen gepeilt dauert die Berechnung sicher 2 Zehnerpotenzen 
länger als ein Tabellenzugriff. Außerdem mußt Du, falls noch nicht 
geschehen, die Floating-Point-Library mit einbinden, das kostet auch 
Speicher. Letztendlich mußt Du halt beide Varianten mal programmieren 
und austesten, was besser paßt.

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jihm schrieb:
> [mäßig ot]

nein, komplett

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll das bedeuten:
[mäßig ot]

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Was soll das bedeuten:
> [mäßig ot]

mäßig / ein wenig
ot = off topic / unpassend

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist daran mäßig unpassend, wenn man als Anfänger zwei Wege sieht und 
nicht weiß, welchen man am Besten wählt.

Es könnte ja sein, dass ich einen Grund nicht berücksichtige, der einen 
dieser Wege als "schlecht" herausfiltert.

Und wenn ich hier die Profis nicht fragen kann, wenn und wo soll ich 
dann fragen?

Autor: l0wside (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Hallo,
>
> ich habe einen Atmega und mein Ausgabewert in Abhängigkeit von der
> Eingabe kann ich mit folgender Formel darstellen:
>
> y = 1000-7,85(x-3)+4,53(x-3)2-0.55(x-3)^3-0.02(x-3)^4
>
> oder bereits fertig berechnet als Array für meine 120
> Eingabemöglichkeiten.
>
> Was ist hier effektiver? Mein RAM ist ziemlich ausgelastet. Wie würdet
> ihr das Programmieren??

Hallo Markus,

wie immer: es kommt darauf an. Brauchst Du denn Wert jede Millisekunde 
oder jede Sekunde? Kriegst Du die Tabelle noch ins Flash gequetscht oder 
ist das Flash (wie das RAM) schon voll? Hast Du noch massig Rechenzeit 
übrig oder ist der Prozessor schon am Anschlag?

Ich würde es erst mit der Tabelle versuchen (die ist recht schnell 
erzeugt leichter zu debuggen als ein Rechenfehler, vor allem einer in 
Festkomma) und erst dann, wenn der Linker sich über mangelnden Platz 
beschwert, es mit dem rechnerischen Ansatz probieren.

Notfalls kannst Du ja auch das Array auf z.B. 60 Werte reduzieren und 
geeignet interpolieren.

Autor: 4???? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Markus:
Das [mäßig ot] sollte eine Formatierung sein und bezog sich darum auf 
den Text danach (also die Erklärung), nicht auf deine Frage.

Autor: mar IO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
y = 1000-7,85(x-3)+4,53(x-3)^2-0.55(x-3)^3-0.02(x-3)^4

vllt. kannst Du die Formel noch etwas vereinfachen, aber was auch noch 
interessant ist, welche (120) Werte kann x haben und welche Auflösung 
von y ist gewünscht.

Wie bereits erwähnt wurde, versuch mal rauszufinden, wie viel Speicher 
die Float-Lib braucht.

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Was ist daran mäßig unpassend, wenn man als Anfänger zwei Wege sieht und
> nicht weiß, welchen man am Besten wählt.

nichts.

Unpassend und besserwisserisch war der Kommentar von "jihm".

Autor: U.R. Schmitt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was du auch versuchen kannst ist ein ungenutzter Pin vor der Berechnung 
ein und danach wieder auszuschalten. Das Ganze in eine Endlosschleife 
mit einem Delay verpackt und ein Oszi an den Pin, kannst du schnell mal 
ausprobieren wie lange die Berechnung tatsächlich braucht, ganz ohne 
theoretische Betrachtungen.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es nur 120 EIngangswerte gibt, und die floating-point libs sonst im 
Programm nicht benötigt werden, ist die Version mit der Tabelle viel 
schneller und verbraucht viel weniger Flash und Ram. Dagegen spricht, 
daß das Programm unübersichtlicher und schlechter wartbar wird.

Ob das "viel weniger" allerdings entscheidend ist, musst du selber 
wissen. Es gibt von Atmel weder Geld für ungenutztes Flash noch für 
nicht verbrauchte Rechenzeit zurück.

Oliver

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Kann man auch sagen, wieviele Taktzyklen eine Berechnung kosten würde?

Wenn man das berechnen will, dann schaut man sich die generierten 
Assembler-Anweisungen an: Aus den benötigten Ausführungszyklen der 
Befehle und der Taktfrequenz ergibt sich die benötigte Rechenzeit. Oder 
man misst es mit einem Oszilloskop, so wie oben beschrieben.

> Es gibt von Atmel weder Geld für ungenutztes Flash noch für
> nicht verbrauchte Rechenzeit zurück.

:-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.