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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.