Tabelle mit Variablen

OP #1575214
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
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
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.
OP
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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.