Tabelle mit Variablen

#1575214
Lesenswert?

Kann man einer tabelle keine Variablen zuordnen?
1
volatile uint8_t LED0;
2
#define LED1      (1<<PC1)
3
#define LED2      (1<<PC2)
4
#define LED3      (1<<PC3)
5
#define LED4      (1<<PC4)
6
#define LED5      (1<<PC5)
7

8
uint8_t KonfigPattern[NR_KONFIGS][NR_KEYS] PROGMEM =
9
  {
10
    {LED0,LED1,LED2,LED3,LED4,LED5},            // Konfiguration 1
11
    {LED0,LED2,LED4,LED1,LED3,LED5},            // Konfiguration 2
12
    {LED1,LED0,LED3,LED2,LED4,LED5},            // Konfiguration 3
13
    {LED0,LED2,LED4,LED1,LED3,LED5},            // Konfiguration 4
14
    {LED0,LED2,LED4,LED1,LED3,LED5},            // Konfiguration 5
15
    {LED0,LED2,LED4,LED1,LED3,LED5},            // Konfiguration 6
16
    {LED0,LED2,LED4,LED1,LED3,LED5},            // Konfiguration 7
17
    {LED0,LED2,LED4,LED1,LED3,LED5},            // Konfiguration 8
18
    {LED0,LED2,LED4,LED1,LED3,LED5},            // Konfiguration 9
19
   };

Ich hätte gerne das LED0 zb. eine Variable ist.
AVR Studio stellt sich da aber quer:

../main.c:75: error: initializer element is not constant
Persönliche Seite #1575662
Lesenswert?

Manfred W. schrieb:
> uint8_t KonfigPattern[NR_KONFIGS][NR_KEYS] PROGMEM =

Bevor ich mich wieder in die Nesseln setzte:
Ich dachte PROGMEM sei der Programmspeicher, also das/der Flash; das 
heißt nicht veränderbar. Da können keine Variablen existieren.

Wenn Du eine variable Matrix haben möchtest, musst Du sie im RAM haben.
Natürlich kannst Du eine konstante Matrix im PROGMEM haben und diese bei 
Programmstart ins RAM kopieren. Dann sind alle Elemente variabel.
Persönliche Seite #1575832
Lesenswert?

Eine Tabelle (bzw zweidimensionales Array), kann sehr wohl variable 
Werte beinhalten. Nur kann man sie nicht so setzen, wie oben angegeben.

Sondern nur so:
1
KonfigPattern[0][0] = LED0;
2
KonfigPattern[0][1] = LED1;

Eine nicht initialisierte Variable enthält trotzdem einen Wert. Nur ist 
dieser nicht Vorhersehbar. Dieser Wert kann aber ohne weiteres in eine 
zweidimentionales Array geschrieben werden.

Ok, nicht so wie es hier versucht wurde.

Natürlich wird bei einer Änderung von LED0 (also der nicht 
initialisierten Variable) nicht jedes Vorkommen von LED0 im Array 
verändert - falls das die Idee des TE war.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren