INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
struct-Objekt - Werte zuweisung zeigt merkwürdiges Verhalten
31.01.2020, 09:43
Beitrag #1
struct-Objekt - Werte zuweisung zeigt merkwürdiges Verhalten
Moin!

die intensiven Leser werden einen Zusammenhang zu anderen Threads sicherlich sehen. Aber da ich der Auffassung bin das hat nicht ganz etwas mit den anderen zu tun hier ein neues Posting.

Hinweis: der gesamte Sketch ist angehängt.

Ich habe ein struct-Objekt definiert:
Code:
struct _Signal {
  //String ref;
  byte pin_led_go;
  byte pin_led_stop;
  byte pin_relais;
  int status;
};

Das wird dann für zwei Signale belegt:
Code:
Signal[0].pin_led_go = 11; //---------- anpassen
    Signal[0].pin_led_stop = 12; //---------- anpassen
    Signal[0].pin_relais = 1; //---------- anpassen
    Signal[0].status = 0;

    // --- Fahrtrichtung "weite Welt"
    Signal[1].pin_led_go = 11; //---------- anpassen
    Signal[1].pin_led_stop = 12; //---------- anpassen
    Signal[1].pin_relais = 1; //---------- anpassen
    Signal[1].status = 0;

In einer Funktion werden Aktionen ausgeführt und dann wird der Status umgestellt. Bei dem Funktionsaufruf wird der Index übergeben um zu definieren welcher Datensatz zur Anwendung kommt.
Code:
void SwitchSignal(int Index)
{
  Serial.println("==========================");
  Serial.println("----> SwitchSignal");
  char buf[20];
  Serial.print("----> Index:=");
  Serial.println(Index);
  Serial.print("----> Status aktuell:=");
  Serial.println(Signal[Index].status);
  if (Signal[Index].status  == 0){ // --> GO
    Signal[Index].status = 1; // neuen Status setzen
  Serial.print("----> Status setzt:=");
  Serial.println(Signal[Index].status);
      
    sprintf(buf, "led_go_%02d 1\n", Index);
    bluetooth.println(buf);
    Serial.println(buf);  
    
    sprintf(buf, "led_stop_%02d 0\n", Index);
    bluetooth.println(buf);
    Serial.println(buf);
    
  } else { // --> STOP
    Signal[Index].status = 0; // neuen Status setzen
      Serial.print("----> Status setzt:=");
  Serial.println(Signal[Index].status);

    sprintf(buf, "led_go_%02d 0\n", Index);
    bluetooth.println(buf);
    Serial.println(buf);
    
    //bluetooth.println("led_go_00 1\n");
    sprintf(buf, "led_stop_%02d 1\n", Index);
    bluetooth.println(buf);
    Serial.println(buf);
  
  }
  bluetooth.println("--> erfolgt");
  Serial.println("--> erfolgt");
}//end-Action

Betrachte ich die Ausgabe auf den Monitor, dann ist für Index=0 alles ok
Zitat:Eingabe Switch 0
==========================
----> SwitchSignal
----> Index:=0
----> Status aktuell:=0
----> Status setzt:=1
led_go_00 1

led_stop_00 0

--> erfolgt
Eingabe Switch 0
==========================
----> SwitchSignal
----> Index:=0
----> Status aktuell:=1
----> Status setzt:=0
led_go_00 0

led_stop_00 1

--> erfolgt

Es wird auch der Status umgestellt.

Aber beim Aufruf mit Index=1 kommt dieses und der STATUS-Wert zeigt für mich ein merkwürdiges Verhalten.
Zitat:Eingabe Switch 1
==========================
----> SwitchSignal
----> Index:=1
----> Status aktuell:=26995
----> Status setzt:=0
led_go_01 0

led_stop_01 1

--> erfolgt
Eingabe Switch 1
==========================
----> SwitchSignal
----> Index:=1
----> Status aktuell:=26995
----> Status setzt:=0
led_go_01 0

led_stop_01 1

--> erfolgt

Kann mir das einer erklären oder sagen was ich falsch gemacht habe?

Gruß Jan


Angehängte Datei(en)
.ino  Blocksignal_Bruhnkaten.ino (Größe: 5,01 KB / Downloads: 51)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2020, 10:10 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2020 10:14 von MicroBahner.)
Beitrag #2
RE: struct-Objekt - Werte zuweisung zeigt merkwürdiges Verhalten
Hallo Jan,
Du legst nur ein Element deines struct an:
Code:
#define SignalCount 2 // Anzahl der Signale
....
_Signal Signal[SignalCount - 1];
Damit überschreibt dein Index 1 irgendwelche andere Werte im Ram.
Du musst beim Anlegen des Array schon die tatsächliche Elementzahl angeben. Nur dein maximaler Index ist dann Anzahl-1

Anzahl 2: Index 0 und 1

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2020, 10:54 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2020 11:01 von Jan99.)
Beitrag #3
RE: struct-Objekt - Werte zuweisung zeigt merkwürdiges Verhalten
(31.01.2020 10:10)MicroBahner schrieb:  Hallo Jan,
Du legst nur ein Element deines struct an:
Code:
#define SignalCount 2 // Anzahl der Signale
....
_Signal Signal[SignalCount - 1];
Damit überschreibt dein Index 1 irgendwelche andere Werte im Ram.
Du musst beim Anlegen des Array schon die tatsächliche Elementzahl angeben. Nur dein maximaler Index ist dann Anzahl-1

Anzahl 2: Index 0 und 1

Hi!

danke - das war wohl ein großes Brett vor dem Kopf.

Aber ich wollte gerne die Anzahl der Signale in einer Konstanten hinterlegen.

Das wäre dann ja

Code:
_Signal Signal[SignalCount];

Aber auch das wirft noch Fehler:
Zitat:Blocksignal_Bruhnkaten:29:21: error: expected unqualified-id before numeric constant

#define SignalCount 2 // Anzahl der Signale

^

G:\Modellbahn\Elektronik\Bruhnkarten_Signale\Blocksignal_Bruhnkaten\Blocksignal_​Bruhnkaten.ino:32:5: note: in expansion of macro 'SignalCount'

int SignalCount = 2; // Anzahl der Signale

Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2020, 12:10
Beitrag #4
RE: struct-Objekt - Werte zuweisung zeigt merkwürdiges Verhalten
Du kannst nicht 2 mal Signalcount definieren.
Lass beides weg und nimm:
Code:
const byte SignalCount = 2;

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  char return Werte sind komplett falsch flowmotion 8 453 12.02.2021 22:27
Letzter Beitrag: Tommy56
  merkwürdiges Verhalten von LCD1602 mhoeting 11 440 08.02.2021 23:08
Letzter Beitrag: mhoeting
  Werte im Display per Taster wechseln bmxruler 8 436 27.01.2021 11:22
Letzter Beitrag: bmxruler
  struct übergeben Karl Stanger 10 432 24.01.2021 20:40
Letzter Beitrag: Karl Stanger
  Float Werte im EEPROM speichern Kein Progammierer 10 762 22.12.2020 21:20
Letzter Beitrag: Tommy56
  Werte sortieren süffi1234 2 319 26.11.2020 16:35
Letzter Beitrag: GuaAck
  Float-Werte mit Bubble-Sort sortieren süffi1234 2 337 25.11.2020 16:36
Letzter Beitrag: süffi1234
  Objekt ohne Rückgabewert? BR03.10 9 749 21.09.2020 14:40
Letzter Beitrag: Tommy56
  Werte im Sketch in Variablen speichern Bitklopfer 4 789 06.09.2020 10:25
Letzter Beitrag: Bitklopfer
  Serielle Werte in String einlesen um damit zu rechnen 425t 2 729 26.08.2020 13:19
Letzter Beitrag: 425t

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste