www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tabelle mit Variablen


Autor: Lokus Pokus (derschatten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man einer tabelle keine Variablen zuordnen?

volatile uint8_t LED0;
#define LED1      (1<<PC1)
#define LED2      (1<<PC2)
#define LED3      (1<<PC3)
#define LED4      (1<<PC4)
#define LED5      (1<<PC5)

uint8_t KonfigPattern[NR_KONFIGS][NR_KEYS] PROGMEM =
  {
    {LED0,LED1,LED2,LED3,LED4,LED5},            // Konfiguration 1
    {LED0,LED2,LED4,LED1,LED3,LED5},            // Konfiguration 2
    {LED1,LED0,LED3,LED2,LED4,LED5},            // Konfiguration 3
    {LED0,LED2,LED4,LED1,LED3,LED5},            // Konfiguration 4
    {LED0,LED2,LED4,LED1,LED3,LED5},            // Konfiguration 5
    {LED0,LED2,LED4,LED1,LED3,LED5},            // Konfiguration 6
    {LED0,LED2,LED4,LED1,LED3,LED5},            // Konfiguration 7
    {LED0,LED2,LED4,LED1,LED3,LED5},            // Konfiguration 8
    {LED0,LED2,LED4,LED1,LED3,LED5},            // Konfiguration 9
   };

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kauf dir endlich ein C-Buch und lern die Grundlagen.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lokus Pokus (derschatten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leg sie doch mal ins RAM, dann wirst du sehen was es ausmacht...

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abgesehen davon:
Welchen Sinn soll es haben, eine nicht initialisierte Variable
(deren Wert zufällig ist) wiederum zur Initalisierung von etwas
anderem zu verwenden?

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
KonfigPattern[0][0] = LED0;
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.

Autor: Lokus Pokus (derschatten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.