Probleme bei Transformation von char array in 3 int arrays

Gast #5178047
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren