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 fachbezogenen 🙂

    wenn 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; die while -Schleife beendest?

    Wie sind RC1 und RC0 definiert? Sind die volatile ?


Anmelden zum Antworten