Hallo, ich möchte gerne ein konstantes array erstellen und die array größe und den inhalt durch einzellne defines erstellen. sollte so aussehen #define liste 520 #define liste 542 #define liste 650 ... => int array[3] = { 520, 542, 650 } es muss jetzt kein define sein. Die liste sollte jedoch im Flashspeicher liegen und die werte sollten zur kompilierzeit eingefügt werden. Die reihenfolge ist egal. Ist so etwas möglich? Gruß Thomas
Je nach verwendetem Controller geht das so:
1 | #define liste1 520
|
2 | #define liste2 542
|
3 | #define liste3 650
|
4 | ...
|
5 | |
6 | const int array[] = { liste1, liste2, liste3 }; |
oder so
1 | #define liste1 520
|
2 | #define liste2 542
|
3 | #define liste3 650
|
4 | ...
|
5 | |
6 | const int array[] PROGMEM = { liste1, liste2, liste3 }; |
Beim Lesezugriff ist im ersten Falle (von-Neumann) gar nichts zu beachten, im zweiten Falle (AVR, Harvard) müssen die progmem-Funktionen verwendet werden, siehe http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29
Danke für die Antwort. Gibt es auch eine möglichkeit ohne die länge zu kennen. So dass man nicht wissen muss ob jetzt die nächste zahl liste1 oder liste5 ist?
>Gibt es auch eine möglichkeit ohne die länge zu >kennen. Ein Array unbekannter Länge kann der Compiler nicht anlegen.
Thomas schrieb: > Die liste sollte jedoch im Flashspeicher liegen Du musst im Handbuch des Compilers nachschauen, wie das genau deklariert wird. Evt. ist noch ein Zusatz nötig. Bei einigen wird bei "const" zwar eine Konstante angelegt, ist dann aber im RAM gespeichert.
Das ist mir bewust ... aber er würde die länge ja kennen wenn er alle #defines liste* gefunden hat.
Thomas schrieb: > Das ist mir bewust ... aber er würde die länge ja kennen wenn er alle > #defines liste* gefunden hat. Siehst du in Rufus' Code irgendwo Längenangaben? Das einzige Array mit fester Länge steht in deinem Code.
beim AVR z.B. so:
1 | PROGMEM const uint16_t TestPattern[*] = |
2 | { |
3 | #include "testpat.inc" |
4 | }; |
in "testpat.inc" stehen dann alle Werte mit Komma getrennt.
1 | /* 1st sequence */ |
2 | 7, 6, 7, 5, 7, 3, 7, 4, 7, 7, 7, 7, 7, 7, 0, |
3 | /* 2nd sequence */ |
4 | 7, 7, 7, 7, 7, 7, 0, |
5 | /* 3rd sequence */ |
6 | 4, 0 |
Gruß Anja
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.