Problem mit For-Schleife (Rückgabeparameter)
-
Ich habe den Code jetzt mal angepasst:
if ( RC0 == 1 ) { for ( i = 0; i < 50; i++ ) { PutChar(0xAF); __delay_ms(20); if ( RC0 != 1 ) { PutChar(0xC5); break; } } }
Also ich zähle jetzt bis 50, und wenn ich mit dem zweiten if abbreche, bleibt der aktuelle schleifendurchlauf nicht in int i gespeichert, also sagen wir ich breche bei durchlauf 13 ab, muss ja i = 13 sein. doch ich kann außderhalb der for schleife i nicht verwenden. Was ich explizit machen will ist, die dauer der eingabe von RC0 = 1 in einer variable abspeichern und für spätere verwendungen im code abrufbar machen.
Könnt ihr mir hierbei helfen? Der code oben compiliert, aber i hat keinen wert zugewießen bekommen...
-
ROOT_92 schrieb:
..., aber i hat keinen wert zugewießen bekommen...
Wie stellst du das fest?
Ist das auch wirklich der Code? Mit Copy&Paste aus deinem Programm hier eingefügt?
-
Wie ist RCO deklariert?
-
Hier ist mein code copy/paste:
Init(); if ( RC0 == 1 ) { for ( i = 0; i < 50; i++ ) { PutChar(0xAF); __delay_ms(20); if ( RC0 != 1 ) { PutChar(0xC5); break; } } write.eeprom(i); } if ( RC1 == 1 ) { read.eeprom; switch (i) { case 1: ... case 50: } }
Ich programmiere Microcontroller in C wobei RC0 und RC1 eingänge sind, welche per include definiert sind ...diese können true = 1 oder false = 0 sein.
ICh wende mich an dieses forum, da ich nur syntaktische fragen habe, und keine fachbezogenenwenn ich die schleife z.b. bis 13 zählen lasse, und ich dann mein eeprom über switch ( i) auslese, passiert bei i = 13 nichts
-
naja, nicht ganz copy/paste..hab die funktionsaufrufe bei den cases weggelassen
-
ROOT_92 schrieb:
Ich bin in der C-Programmierung leider noch nicht so bewandert, habe lediglich ein Semester Java-Programmieren studiert
Macht nichts, jeder macht mal Fehler.
Also ich habe deine textuelle Beschreibung nicht wirklich verstanden, aber biete mal an:
int i; for( i = 0; RC0 == 1; i++ ) /* solange RC0 == 1, i hochzählen... */ { PutChar(0xAF); /* ...Ausgabe machen... */ __delay_ms(20); /* ...und 20ms warten */ } /* hier ist jetzt RC0 != 1, da for beendet ist */ PutChar(0xC5); /* i hat hier die Anzahl der obigen for-Durchläufe, also evtl. einfach: */ write.eeprom(i);
-
Danke Wutz,
ich glaube, dass das genau das ist, was ich gesucht habe...werde ich bald ausprobieren, sobald mein kompletter code fertiggestellt ist
-
Hallo, ich hoffe hier antwortet noch jemand, das Thema ist ja schon etwas älter.
Also ich bin jetzt weitgehen fertig mit dem code, nur leider hab ich das folgende problem: hier mein code, copy/paste:while (1) { Init(); if ( RC1 == 1 ) { for( i = 0; RC1 == 1; i++ ) { /* solange RC0 == 1, i hochzählen... */ PutChar(0xAF); /* ...Ausgabe machen... */ __delay_ms(20); /* ...und 20ms warten */ } PutChar(0xCE); __delay_ms(20); break; } /* hier ist jetzt RC0 != 1, da for beendet ist */ if ( RC0 == 1 ) { for( j = 0; j == i; j++ ) { PutChar(0xAF); __delay_ms(20); if ( j == i ) { PutChar(0xCE); __delay_ms(20); } } break; } }
Ich habe das beispiel von Wutz angewandt, doch muss ich feststellen, dass die variable i leer ist.
Nochmal genau was ich machen will:Ich will in der ersten For-Schleife i solange höchzählen, bis die Bedingung RC1 == 1 nicht mehr erfüllt ist. i hat ja danach den Wert des aktuellen schleifendurchgangs, oder nicht?
In der zweiten schleife will ich, dass wenn die Bedingung RC0 == 1 erfüllt ist, eine weitere for-schleife genau an den selben Punkt hinzählt, wie die schleife zuvor, also bis j == i, dann soll sie abbrechen.
Nur funktioniert das ganze leider nicht, an was kann das liegen?
Vielen Dank im vorraus
-
Wenn ich mir den Code so ansehe bedeutet, dass wenn i leer ist, RC1 nie 1 ist.
-
Irgendeinen Wert wird i schon haben, auch wenn er 0 ist.
Dir ist auch klar, dass du mit dem
break;
diewhile
-Schleife beendest?Wie sind RC1 und RC0 definiert? Sind die
volatile
?