Konstantes Array

Gast #2777749
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
Persönliche Seite #2777759
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
Gast #2777767
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?
Gast #2777797
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.
Gast #2777832
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.