www.mikrocontroller.net

Forum: Compiler & IDEs Arrays ... ?!


Autor: Stefan Sczekalla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich hab das Problem, das sich ein banales:

volatile int Parameter[5]={0,1,2,3,4};

Array verhält als wenn es "schreibgeschütz" wäre.

es fällt mir schwer das besser zu beschreiben.

ich hab das Array wie oben deklariert. und sehe mittels LCD das hinter
jedem Parameter[i] für i = {0..5} auch der wert steht.

ich kann innerhalb einer funktion auch einen wert verändern z.b. mit

Parameter[n]++;

doch sobald ich z.B auf Parameter[n+1] aus dem array zugreife scheint
der wert den ich vorher verändert habe komplett "vergessen" zu sein.

und lese beim nächsten zugriff auf das array wieder den Wert mit dem
ich das array initialisiert habe ...

Hilfe !!!

Grüße, ein komplett ratloser Stefan

PS: ich kann auch nochmal den kompletten source anhängen wenn sich das
mal jemand ansehen möchte

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> PS: ich kann auch nochmal den kompletten source anhängen wenn
> sich das mal jemand ansehen möchte
Ja, etwas mehr Code wäre schon hilfreich.

Du musst aber bitte nicht alles anhängen, sondern wenn möglich ein
Minimalbeispiel, bei dem das beschriebene Verhalten auftritt. Alles
Unnötige weglassen, es sollte aber noch compilierbar sein.

Autor: Stefan Sczekalla (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Chris,

ich hab versucht das ganze etwas einzudampfen...

in der angehängten version hab ich die initialisierung des Arrays
"Parameter" weggelassen. Der Effekt ist aber gleiche wie bereits
beschrieben.

In der Angehängten Datei sieht der Programmablauf ungefär so aus:

Timer 2 sorgt für einen "Systemtakt".

in Main wird Port A gepollt, und entprellt. sobald eine "entprellte"
Taste in "Key" vorliegt, wird KeyState auf den Wert "ProcessKey"
gesetzt. Menustate zeigt auf den aktuell zu "managende"
Menueeintrag.

Mit

   array[MenuState](Key,MenuState);

wird dann eine Funktion ( siehe deklaration array[]={...} )
quasi in abhängikeit des Menüindexes "MenuState" gecalled.

innerhalb der aufgerufenen funktion Z.B. "ServoL" wird dann
ProcessKeys aufgerufen.

Von ProcessKeys erwarte ich, das sich - sobald die Bitkombi "PLUS"
oder "Minus" gedrückt wird, im (imho global deffinierten ) array
"Parameter" die werte veränderen.

das passiert auch, nur - sobald ich mit der "Menu" Taste den nächsten
 MenuState auswähle - solange bis ich wieder im selben "Menü" bin
steht wieder "0" bzw. der initialisierte Wert in
Parameter[MenuState]

ich hoffe Du kommst mit dem Spagetti-Code klar.

Grüße,

Stefan

Autor: Stefan Sczekalla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Criss,

ich habs ...

Deppenfehler ... beim aufruf von der in array gespeicherten funktionen
an einen index gesprungen den es nicht gibt.

d.h. das Programm hat immer wieder bei init(); angefangen ...

hggggrrrrr....

Grüße,

Stefan

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.