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