mikrocontroller.net

Forum: Compiler & IDEs Lookup-Table


Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich brauche für ein Projekt eine grössere Lookup-Table, sie beinhaltet
Punkte auf verschieden grossen Kreisen. Es sind ca. 360 Bytes, die ich
bevorzugt im Flash ablegen möchte.

Nun dachte ich daran, diese Lookup-Table vom Präprozessor berechnen zu
lassen, z.B. indem ein Array berechnet wird. Dazu brauche ich aber eine
Schleife - geht sowas mit dem C-Präprozessor? Oder wie könnte man das
Problem mit der Lookup-Table alternativ lösen?

Gruss

Michael

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dazu brauche ich aber eine
> Schleife - geht sowas mit dem C-Präprozessor?

Nein, das kann er nicht.

Der m4-Makroprozessor kann sowas, aber er ist, ähem, sehr
gewöhnungsbedürftig.

Ich würde eine Scriptsprache bevorzugen und mit dieser die
Datei generieren.  WinAVR bringt zum Beispiel einen awk mit
(heißt dort "gawk"), damit ließe sich das bestimmt machen.

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich würde eine Scriptsprache bevorzugen und mit dieser die
> Datei generieren.

Das ist natürlich auch eine gute Möglichkeit. Würdest du damit einfach
C-Klartext erstellen:

const uint8_t pgmFooByteArray1[] PROGMEM = {.......};

oder könnte man das ganze auch in eine separate Datei ausgeben, die
dann irgendwie eingebunden wird? (Abgesehen jetzt vom einbinden mit
include)

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klartext erstellen ist am einfachsten. Ich verwende z.B. folgendes um
eine Sinus-Tabelle von 0 bis pi/2 zu berechnen:

const unsigned char sinus[] = {

<%= (0..20).map {|x| (Math.sin(x * Math::PI/40) * 255).round }.join(',
') %>

}

Das ganze durch "erb" (embedded Ruby) geschickt und in eine eigene
Headerdatei sinus.h gepipet, die dann so aussieht:

const unsigned char sinus[] = {

0, 20, 40, 60, 79, 98, 116, 133, 150, 166, 180, 194, 206, 217, 227,
236, 243, 248, 252, 254, 255

}

Lässt sich wunderbar ins Makefile integrieren, und geht natürlich auch
mit awk, PHP, Perl etc.

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andreas: Klingt sinnvoll, werde das dann wohl so machen! Mal das awk
von WinAVR anschauen...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du uns sagst, was in die Tabelle rein soll, kann ich dir
die paar Zeilen awk bestimmt auch posten.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übrigens.

Du kannst durchaus auch folgendes machen:

const unsigned char sinus[] = {
#include "Werte.txt"
}

und in Werte.txt stehen dann nur deine Werte

0,
20,
40,
60,
79,
98, 116,
133, 150,
166, 180, 194, 206, 217, 227,
236, 243, 248, 252, 254, 255

#include ersetzt lediglich die Zeile mit dem #include durch
den Inhalt der angegebenen Datei. Was in der Datei steht,
interessiert den Präprozessor nicht wenn er den #include
durchführt.

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wenn du uns sagst, was in die Tabelle rein soll, kann ich dir
> die paar Zeilen awk bestimmt auch posten.

Danke für das Angebot! Aber ich denke mal, ich werde es zuerst selbst
versuchen.

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.