Forum: Compiler & IDEs char Array an Funktion übergeben


von basti (Gast)


Lesenswert?

1
 char mona[11];                           // Array Monatsname
2
3
void get( uint8_t ss)
4
{ 
5
 uint8_t month ;
6
 
7
 if ( month==1)               // Januar
8
 { 
9
  strcpy( mona, "jan" );  // Kopiere Monatsname in mona-Array
10
11
  write_temp_timeDate(mona);   
12
 }
13
}
14
15
16
void writing_sd_temp(char *monath)
17
{
18
 uint8_t i = 0;
19
  
20
   if ( hour==0 && minute==30 && second==45 )
21
    {
22
   write_temp_timeDate(monath ); // Uhrzeit und Datum in Datei 
23
    }
24
}
25
26
27
unsigned char write_temp_timeDate(char *name ) 
28
//###################################################################################
29
{
30
//
31
  unsigned char by;
32
  unsigned int written;
33
  unsigned char  result;
34
35
  sprintf( Buffer, "%02d:%02d:%02d %02d.%02d.%02d",hour,minute,second,day,month,year);  //
36
37
  sprintf( datname, "%02d%02d%02d%02d",hour,minute,day,month);  //
38
39
40
  strcat( datname, ".txt" ); // .txt an datname  anhängen damits ein 8.3DOS-Name wird
41
42
  Chdir("temper");           // ORDNER temper  ÖFFNEN
43
  Chdir(name);             // ORDNER Monats-Name  ÖFFNEN
44
45
46
47
48
   if(Fopen(datname,'a')!=F_OK) return 0;
49
    {        
50
       written=Fwrite((unsigned char *)Buffer,strlen(Buffer));
51
    
52
        by='\r';                //Enter
53
        result=Fwrite(&by,1);  //Schreiben
54
          
55
    by='\n';               //Neue Zeile
56
        result=Fwrite(&by,1); //Schreiben
57
        
58
     
59
    }
60
      Fclose();
61
62
    Chdir("..");        //Ordner Monats-Name  Schliessen
63
    Chdir("..");        //Ordner  temper Schliessen            
64
return 1;//result;
65
}

von basti (Gast)


Lesenswert?

oh da hab ich zu schnell gedrückt,

ich möchte gerne das Array mona an 2 Funktionen übergeben, leider klappt 
das nicht so.

in der Funktion void get( uint8_t ss) (wird von der Mainloop alle 
5sekunden aufgerufen) soll das array an die Funktion 
write_temp_timeDate(mona); weitergegeben werden ,in der ein Ordner 
geöffnet werden soll leider funktioniert das nicht so.

Wenn ich den Ordner so Chdir("jan" ); öffne geht es.

vielleicht kann mir einer von ihnen weiterhelfen was ich falsch mache 
mit dem array
1
 char mona[11];                           // Array Monatsname
2
3
void get(uint8_t month)
4
{ 
5
 uint8_t month ;
6
 
7
 if ( month==1)               // Januar
8
 { 
9
  strcpy( mona, "jan" );  // Kopiere Monatsname in mona-Array
10
11
  write_temp_timeDate(mona);   
12
 }
13
}
14
15
16
void writing_sd_temp(char *monath)
17
{
18
 uint8_t i = 0;
19
  
20
   if ( hour==0 && minute==30 && second==45 )
21
    {
22
   write_temp_timeDate(monath ); // Uhrzeit und Datum in Datei 
23
    }
24
}
25
26
27
unsigned char write_temp_timeDate(char *name ) 
28
29
{
30
//
31
  unsigned char by;
32
  unsigned int written;
33
  unsigned char  result;
34
35
  sprintf( Buffer, "%02d:%02d:%02d %02d.%02d.%02d",hour,minute,second,day,month,year);  //
36
37
  sprintf( datname, "%02d%02d%02d%02d",hour,minute,day,month);  //
38
39
40
  strcat( datname, ".txt" ); // .txt an datname  anhängen damits ein 8.3DOS-Name wird
41
42
  Chdir("temper");           // ORDNER temper  ÖFFNEN
43
  Chdir(name);             // ORDNER Monats-Name  ÖFFNEN
44
45
46
47
48
   if(Fopen(datname,'a')!=F_OK) return 0;
49
    {        
50
       written=Fwrite((unsigned char *)Buffer,strlen(Buffer));
51
    
52
        by='\r';                //Enter
53
        result=Fwrite(&by,1);  //Schreiben
54
          
55
    by='\n';               //Neue Zeile
56
        result=Fwrite(&by,1); //Schreiben
57
        
58
     
59
    }
60
      Fclose();
61
62
    Chdir("..");        //Ordner Monats-Name  Schliessen
63
    Chdir("..");        //Ordner  temper Schliessen            
64
return 1;//result;
65
}

von Klaus W. (mfgkw)


Lesenswert?

Sorry, aber erstens verstehe ich nicht, was das Ganze soll, und zweitens 
sind da ein paar -ähm- Merkwürdigkeiten, die mich glauben lassen, daß es 
irgendwie auch nicht sinnvoll gehen kann, und drittens ist die 
Formatierung so grottig, daß ich mich als Compiler weigern würde, etwas 
davon zu übersetzen.
1
char mona[11];                           // Array Monatsname

mona wird nicht initialisiert?
1
void get(uint8_t month)
"get" ist schnell geaschrieben, aber als Name nicht besonders 
aussagekräftig.

ok, es gibt einen Parameter month...
1
{
2
  uint8_t month ;
... und jetzt gleich noch eine lokale Variable mit demselben Namen? Wozu 
dann der Parameter? Welchen Wert bekommt die lokale Variable month?
1
  if ( month==1)               // Januar
2
  {
3
    strcpy( mona, "jan" );  // Kopiere Monatsname in mona-Array
4
5
    write_temp_timeDate(mona);
6
  }
1. ist der Januar wirklich 1 und nicht 0?
2. Was ist, wenn month nicht 1 ist? Dann darf das Programm mit dem 
zufälligen Inhalt von mona weiterlaufen?
1
}
2
3
4
void writing_sd_temp(char *monath)
Nach mona und month wieder eine Variable, die so ähnlich heißt, aber 
irgendwie anders ist. Man könnte mal sinnvolle Namen nehmen, damit man 
den Dingern ansieht, was wozu ist.
naja egal, die Funktion wird eh nicht verwendet.
Aber wozu steht sie dann hier? Um mich zu verwirren?
Wenn sie Teil des Problems sein kann, fehlt ein Aufruf.
Wenn sie nicht nötig ist, kann sie weg.
1
{
2
  uint8_t i = 0;
3
4
  if ( hour==0 && minute==30 && second==45 )
wo kommen diese drei jetzt her? Haben die sinnvolle Werte?
1
  {
2
    write_temp_timeDate(monath ); // Uhrzeit und Datum in Datei
Wenn du konsequent alle Rückgabewerte ignorierst, wundert es niemanden, 
wenn du nicht weisst, was in deinem Programm passiert.
1
  }
2
}
3
4
5
unsigned char write_temp_timeDate(char *name )
6
7
{
8
  //
9
  unsigned char by;
10
  unsigned int written;
11
  unsigned char  result;
Was machen die drei? Außer der letzten sieht man dem Namen nicht viel 
an, initalisiert sind sie natürlich auch wieder nicht, und verwendet 
werden sie auch nicht alle.
1
  sprintf( Buffer, "%02d:%02d:%02d %02d.%02d.%02d",hour,minute,second,day,month,year);  //
Wo kommt jetzt auf einmal Buffer her? Ist der groß genug? Wieso eine 
globale Variable?
1
  sprintf( datname, "%02d%02d%02d%02d",hour,minute,day,month);  //
2
3
4
  strcat( datname, ".txt" ); // .txt an datname  anhängen damits ein 8.3DOS-Name wird
Könnte man auch gleich vom sprintf mitmachen lassen, aber egal.
1
  Chdir("temper");           // ORDNER temper  ÖFFNEN
2
  Chdir(name);             // ORDNER Monats-Name  ÖFFNEN
Gibt es das Verzeichnis überhaupt? Was, wenn nicht?
1
  if(Fopen(datname,'a')!=F_OK) return 0;
Bekommt dein Fopen wirklich ein char als zweiten Parameter?
1
  {
2
    written=Fwrite((unsigned char *)Buffer,strlen(Buffer));
Was, wenn das Schreiben nicht klappt? Keine Reaktion darauf?
1
    by='\r';                //Enter
2
    result=Fwrite(&by,1);  //Schreiben
3
4
    by='\n';               //Neue Zeile
5
    result=Fwrite(&by,1); //Schreiben
Wieso nicht gleich beide auf einmal (Fwrite("\r\n",2))?
Was, wenn das Schreiben nicht klappt? Keine Reaktion darauf?
1
  }
2
  Fclose();
3
4
  Chdir("..");        //Ordner Monats-Name  Schliessen
5
  Chdir("..");        //Ordner  temper Schliessen
6
  return 1;//result;
Falscher Kommentar! Eben nicht result.
1
}

basti schrieb:
> vielleicht kann mir einer von ihnen weiterhelfen was ich falsch mache
> mit dem array

Ich frage mich eher, was an dem Programm überhaupt funktionieren soll; 
abgesehen davon, daß es nicht vollständig ist.

Sehr planvoll sieht es nicht aus, ehrlich gesagt.

basti schrieb:
> ich möchte gerne das Array mona an 2 Funktionen übergeben, leider klappt
> das nicht so.

"klappt nicht" ist keine wirklich sinnvolle Fehlerbeschreibung.

Vielleicht wird der Programmteil in get gar nicht durchlaufen, weil 
month nicht 1 ist?

von basti (Gast)


Lesenswert?

hallo,
hhour,minute,second,day,month,year sind Globale Variablen.
char Buffer[50];// Array Ausgabe Buffer für alle möglichen lcd ausgaben 
ist ein globales ARRAY

void get(uint8_t month) wird vom Hauptprogramm aufgerufen und enthält 
den Monat 1 bis 12,
wenn zB. month==1 dann ist das Januar.

Meine Ordner sind auf der SD-Card vorhanden in TEMPER  sind die 
Moants-Ordner  von Januar bis Dezember.

Aber leider kann ich die Monats-Ordner so nicht öffnen wie ichs jetzt 
habe.
Wenn ich das jetzt so mache in write_temp_timeDate(char *name ),
  Chdir("temper");           // ORDNER temper  ÖFFNEN
  Chdir("jan");             // ORDNER Monats-Name  ÖFFNEN
dann gehts,aber ich wollte das gerne anders machen so wie unten.



1
 char mona[11];                           // Array Monatsname für die Manats-Ordner
2
 char datname[11];                         // Array Text-Datei-Name in den Manats-Ordner 8.3 DOSNAME 
3
4
5
void get(uint8_t month)
6
{ 
7
8
       if ( month==1)               // Januar
9
        { 
10
         strcpy( mona, "jan" );  // Kopiere Monatsname in mona-Array
11
         write_temp_timeDate(mona);   ("jan");    // Vergleich Stunde zum Temperratur-Daten schreiben
12
        }
13
14
       if ( month==2)         //Februar
15
        { 
16
         strcpy( mona, "feb" );      // Kopiere Monatsname in mona-Array   
17
         write_temp_timeDate(mona);   (mona);    // Vergleich Stunde zum Temperratur-Daten schreiben
18
        }
19
20
       if ( month==3)         //März
21
        { 
22
         strcpy( mona, "mae" );      // Kopiere Monatsname in mona-Array   
23
         write_temp_timeDate(mona);   (mona);    // Vergleich Stunde zum Temperratur-Daten schreiben
24
        }
25
26
       if ( month==4)         //April
27
        { 
28
         strcpy( mona, "apr" );      // Kopiere Monatsname in mona-Array 
29
         write_temp_timeDate(mona);   (mona);    // Vergleich Stunde zum Temperratur-Daten schreiben
30
        }
31
32
       if (  month==5)         //Mai
33
        { 
34
         strcpy( mona, "mai" );      // Kopiere Monatsname in mona-Array   
35
         write_temp_timeDate(mona);   (mona);    // Vergleich Stunde zum Temperratur-Daten schreiben
36
        }
37
38
       if (  month==6)         //Juni
39
        { 
40
         strcpy( mona, "jun" );      // Kopiere Monatsname in mona-Array   
41
         write_temp_timeDate(mona);   (mona);    // Vergleich Stunde zum Temperratur-Daten schreiben
42
        }
43
44
       if (  month==7)         //Juli
45
        { 
46
         strcpy( mona, "jul" );      // Kopiere Monatsname in mona-Array   
47
         write_temp_timeDate(mona);   (mona);    // Vergleich Stunde zum Temperratur-Daten schreiben
48
        }
49
50
       if (  month==8)         //August
51
        { 
52
         strcpy( mona, "aug" );      // Kopiere Monatsname in mona-Array   
53
         write_temp_timeDate(mona);   (mona);    // Vergleich Stunde zum Temperratur-Daten schreiben
54
        }
55
56
       if (  month==9)         //September
57
        { 
58
         strcpy( mona, "sep" );      // Kopiere Monatsname in mona-Array   
59
         write_temp_timeDate(mona);   (mona);    // Vergleich Stunde zum Temperratur-Daten schreiben
60
        }
61
62
       if (  month==10)       //October
63
        { 
64
         strcpy( mona, "okt" );      // Kopiere Monatsname in mona-Array
65
         write_temp_timeDate(mona);   (mona);    // Vergleich Stunde zum Temperratur-Daten schreiben
66
        }
67
68
       if (   month==11)       //November
69
        { 
70
         strcpy( mona, "nov" );      // Kopiere Monatsname in mona-Array  
71
         write_temp_timeDate(mona);   (mona);    // Vergleich Stunde zum Temperratur-Daten schreiben
72
        }
73
74
       if (   month==12)       //Dezember
75
        { 
76
         strcpy( mona, "dez" );      // Kopiere Monatsname in mona-Array
77
         write_temp_timeDate(mona);   (mona);    // Vergleich Stunde zum Temperratur-Daten schreiben
78
        }
79
}
80
81
82
void writing_sd_temp(char *monath)
83
{
84
 uint8_t i = 0;
85
  
86
   if ( hour==0 && minute==30 && second==45 )
87
    {
88
     write_temp_timeDate(monath ); // Uhrzeit und Datum in Datei 
89
    
90
       for(i = 1; i < 19; i++)
91
        {
92
         write_temp(monath,i,TempWert[i],TempWertkomma[i],TempgWert[i]);
93
        }
94
    }
95
}
96
97
98
unsigned char write_temp_timeDate(char *name )
99
{         
100
  unsigned char by;
101
  unsigned int written;
102
  unsigned char  result;
103
104
  sprintf( Buffer, "%02d:%02d:%02d %02d.%02d.%02d",hour,minute,second,day,month,year);  //
105
106
  sprintf( datname, "%02d%02d%02d%02d",hour,minute,day,month);  //
107
108
109
  strcat( datname, ".txt" ); // .txt an datname  anhängen damits ein 8.3DOS-Name wird
110
111
  Chdir("temper");           // ORDNER temper  ÖFFNEN
112
  Chdir(name);             // ORDNER Monats-Name  ÖFFNEN
113
114
115
116
117
   if(Fopen(datname,'a')!=F_OK) return 0;
118
    {        
119
       written=Fwrite((unsigned char *)Buffer,strlen(Buffer));
120
    
121
        by='\r';                //Enter
122
        result=Fwrite(&by,1);  //Schreiben
123
          
124
        by='\n';               //Neue Zeile
125
        result=Fwrite(&by,1); //Schreiben
126
              
127
      Fclose();
128
    }
129
130
    Chdir("..");        //Ordner Monats-Name  Schliessen
131
    Chdir("..");        //Ordner  temper Schliessen            
132
return result;
133
}

von Troll (Gast)


Lesenswert?

>[...Viele if...]
Schon mal was von switch und case gehört?

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.