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.
Wenn du uns sagst, was in die Tabelle rein soll, kann ich dir die paar Zeilen awk bestimmt auch posten.
Ü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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.