Forum: Mikrocontroller und Digitale Elektronik Probleme bei Transformation von char array in 3 int arrays


von Lisa (Gast)


Lesenswert?

Hallo,

ich verzweifle langsam an der Logik meiner Funktion, die ein 
"Character-array" inklusive der Länge des Arrays übergeben bekommt und 
daraus 3 Integer-arrays [6] mit den Zahlen 0 oder 1 füllen soll. Dafür 
verwende ich for schleifen die überprüfen ob eine '0' oder '1' an der 
jeweiligen Stelle im "Character-Array" steht. Meine Funktion hat 
zunächst nur bei der 1. und 3. for-Schleife funktioniert. Dann habe ich 
die Variablen CRelais[6],ERelais[6] und GRelais[6] als Globale Variablen 
und Volatile int deklariert und dann funktionierte plötzlich die 1. und 
2. for-Schleife, aber die 3. nicht mehr. In der jeweils nicht 
funktionierenden for-Schleife werden alle Werte des Arrays auf 0 
gesetzt. Das Char-array lasse ich mir zum Überprüfen in meiner Main nach 
der Verarbeitung ausgeben um zu überprüfen ob dieses richtig übergeben 
wurde. Dabei sind die einsen und nullen so gesetzt, wie ich es zuvor 
auch eingeben habe.

Der entsprechende Teil der Funktion sieht wie folgt aus:
1
//Globale Variablen
2
volatile char rx_str[RX_MAXSTRLEN + 1] = "";
3
volatile int CRelais[6];
4
volatile int ERelais[6];
5
volatile int GRelais[6];
6
7
8
int get_relais(char rx_relais[], int length) 
9
{
10
int n=0;
11
int Cone=0;
12
int Eone=0;
13
int Gone=0;
14
int f=0;
15
  
16
if (length==19)    //Überprüfen ob 18 Relais gesetzt wurden
17
{
18
        //Collectorrelais als int array speichern
19
  for (n=1;n<7;n++)            
20
  {
21
          if (rx_relais[n]=='0')
22
      CRelais[n-1]=0;
23
      
24
    else if (rx_relais[n]=='1')
25
      CRelais[n-1]=1;
26
      
27
    else
28
      f=1;
29
  }
30
  //Emitterrelais als int array speichern
31
  for (n=7;n<13;n++)  
32
  {
33
    if (rx_relais[n]=='0')
34
      ERelais[n-1]=0;
35
      
36
    else if (rx_relais[n]=='1')
37
      ERelais[n-1]=1;
38
      
39
    else
40
      f=1;
41
  }
42
  //Gaterelais als int array speichern
43
  for (n=13;n<19;n++)
44
  {
45
    if (rx_relais[n]=='0')
46
      GRelais[n-1]=0;
47
      
48
    else if (rx_relais[n]=='1')
49
      GRelais[n-1]=1;
50
      
51
    else
52
      f=1;
53
  }
54
}
55
else
56
{
57
  f=1;
58
  USART_Transmits ("406"); //Zu viel oder Wenig Relaisstellungen  
59
}
60
if (f==1)
61
{
62
  return 0;
63
  relais_open;
64
}
65
else
66
{
67
  return 1; 
68
}
69
}

Woran könnte es liegen, dass sich das Programm so verhält und wie kann 
ich das ändern?
Ich entschuldige mich, falls ich etwas falsch ausgedrückt habe. Es ist 
mein erstes Programm, welches ich komplett alleine schreibe.

Danke schonmal für eure Hilfe!

LG Lisa

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Lisa schrieb:
> wie kann ich das ändern?
Du kannst (wie über jeder Eingabebox beschrieben) die [c] Tags um deinen 
Code machen. Dann wird er schön formatiert...

von Stefan E. (sternst)


Lesenswert?

1
  for (n=7;n<13;n++)  
2
  {
3
    if (rx_relais[n]=='0')
4
      ERelais[n-1]=0;
5
      
6
    else if (rx_relais[n]=='1')
7
      ERelais[n-1]=1;
8
      
9
    else
10
      f=1;
11
  }
[n-7] wäre richtig (statt [n-1]).
Und die dritte Schleife hat das gleiche Problem.

von Lisa (Gast)


Lesenswert?

Lothar M. schrieb:
> Du kannst (wie über jeder Eingabebox beschrieben) die [c] Tags um deinen
> Code machen. Dann wird er schön formatiert...

Danke für den Hinweis. Werde das die nächsten Male versuchen zu 
verwenden.

von Lisa (Gast)


Lesenswert?

Stefan E. schrieb:
> [n-7] wäre richtig (statt [n-1]).
> Und die dritte Schleife hat das gleiche Problem.

Vielen lieben Dank! Das habe ich den ganzen Morgen übersehen. Manchmal 
sieht man wirklich den Wald vor lauter Bäumen nicht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.