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
Kauf dir endlich ein C-Buch und lern die Grundlagen.
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.
Also laut der Fehlermeldung:
"../main.c:75: error: initializer element is not constant"
kann eine Tabelle nur fixwerte verarbeiten.
Zumindest so wie ich sie verwende.
Ich denke nicht das es was damit zu tun hat wo die Tabelle gerade liegt.
Leg sie doch mal ins RAM, dann wirst du sehen was es ausmacht...
Abgesehen davon:
Welchen Sinn soll es haben, eine nicht initialisierte Variable
(deren Wert zufällig ist) wiederum zur Initalisierung von etwas
anderem zu verwenden?
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.
Christian H. schrieb:
> 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.
Also wenn ichd as richtig verstanden habe für die Nutzung eines Timers
unbrauchbar?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|