Warum sollte der Compiler meckern? Syntaktisch ist das Programm ja in Ordnung: wenn man keine Klammern setzt, wird die auf das while() folgende Anweisung solange ausgeführt, bis der Audruck im while() false wird. Wenn da nichts weiter passieren soll, muß dort das C-Equivalent eines NOPs stehen, nämlich das Semikolon. In deinem Code steht aber das Lesen des ADC-Resultats, und das macht er dann auch im Loop. Das ist zwar sinnloser aber gültiger Code.
Eine Hilfe ist, sich den Code automatisch von der IDE formatieren zu lassen. An der Einrückung hätte man das sofort gesehen.
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Es lag wirklich an dem Semikolon, messe beide ADC Eingänge im Abstand von 50ms ohne Störungen. Somit würde ich meinen Thema als erledigt, danke .
naja Atmelstudio meckert bei mir meist wenn ich irgendwo in einer Zeile ein Semikolon vergesse zum Satzende, scheint bei einer While-Schleife warscheinlich eine Ausnahme zu sein ... wieder was dazugelernt
Du hast offensichtlich meinen Text nicht gelesen. Das Semikolon ist ja da:
Nur steht es leider hinter der Anweisung, die ADCW liest. Ein Semikolon ohne Anweisung davor ist ein NOP in C, und das wolltest du.Code:ADCSRA |= (1<<ADSC); // single conversion while (ADCSRA & (1<<ADSC)) // warten bis ADC fertig ADC_result = ADCW; <------------- Semikolon //ADC_result += ADCW;
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Jo, C kann schon ganz schön fies sein
Wenn's jetzt rennt, is' ja schön. Hab ich meine Pfadfindermission für heute erfüllt.
hey
sorry Klebwax,aber so langsam verstehe ich worauf du hinaus willst
ADCSRA |= (1<<ADSC); // single conversion
while (ADCSRA & (1<<ADSC)); <-- das Semikolon hat gefehlt, nach dem ich es gesetzt habe geht alles
{
// warten bis ADC fertig (also wenn ichs so schreiben würde muss ich das Semikolon hinter dem Wihle() weglassen)
}
ADC_result = ADCW; <------------- Semikolon
//ADC_result += ADCW;
Geändert von Jackeder (23.04.2015 um 19:15 Uhr)
Ich schreib das dann noch etwas anders, so wie das K&R mal angefangen haben: die öffnende Klammer auf die selbe Zeile wie das if oder while, dann einrücken, und die schließende auf die selbe Ebene wie das while. Die automatische Formatierung meiner IDE ist auch auf dieses Format eingestellt. Beispiel:
Das Ziel ist, daß man Code wie einen "Text" lesen kann, und sofort versteht, was gemeint ist. C ist zwar davon meilenweit entfernt, aber ein wenig kann man sich daran orientieren.Code:while (Bedingung) { Anweisung; print(....); // zum Debuggen, kann schnell rauskommentiert werden } /* die Anweisung kann auch leer sein, trotzdem sieht man auf den ersten Blick dass hier eine Schleife ist */ while (das Reday-Bit ist false) { ; // einfach warten // print(...); // Debug, auskommentiert oder gelöscht Nop(); // später eingefügt, um einen Breakpoint zu setzen, wird wieder gelöscht } // am Ende sieht es so aus while (Bedingung) { // warten bis ready ; // Einrückung erkennt man auch beim schnellen Lesen / Scrollen } // das ist zwar equivalent zu while (Bedingung) ; /* hier rutscht einem schnell ein fehlendes Semikolon durch und der Compiler kann einem da nicht helfen. */
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Lesezeichen