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
> 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.
> 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)
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.
Ü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.
> 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.