Hallo Leute ich habe ein Problem mit einer Variable die ich in einem Interrupt hochzählen will bekomme aber immer dieser Fehler "error: 'muh' was not declared in this scope" vielleicht findet ihr ihn ja Gruß Uwe #include <avr/io.h> #include <stdint.h> #include <avr/interrupt.h> ISR (TIMER0_COMPA_vect) { PORTD = 0b00000000; muh ++; } int main() { DDRB = 0b00000000; DDRD = 0b00000111; PORTD = 0b00000111; ADCSRA = (1<<ADEN) | (1<<ADATE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); ADMUX = (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0) | (1<<REFS0) | (0<<REFS1); ADC = (0<<ADLAR); TCCR0A = (0<<WGM02) | (1<<WGM01) | (0<<WGM00); // CTC Modus TCCR0B = (1<<CS02) | (0<<CS01) | (1<<CS00); // Prescaler 1024 OCR0A = 124; //Oberes Ende für Interupt TIMSK0 = (1<<OCIE0A); uint16_t result; uint8_t Eingang_B0; uint8_t Zahl; volatile uint8_t muh; bool Blockieren = 0; sei(); // Global Interrupts aktivieren while(1) { Zahl = muh; Eingang_B0 = PINB; Eingang_B0 = Eingang_B0 & 0x01;
Setz doch mal volatile uint8_t muh; unter den includes. lg, repac3r
Besorge Dir erstmal ein Buch über "C". Dir fehlt wichtiges Grundwissen.
Cool danke für die schnelle und HILFREICHE Antwort so Funktioniert es
Uwe schrieb: > Hallo Leute > > ich habe ein Problem mit einer Variable die ich in einem Interrupt > hochzählen will bekomme aber immer dieser Fehler > > "error: 'muh' was not declared in this scope" > > vielleicht findet ihr ihn ja > > Gruß Uwe > > > #include <avr/io.h> > #include <stdint.h> > #include <avr/interrupt.h> > > > ISR (TIMER0_COMPA_vect) > { > PORTD = 0b00000000; > muh ++; > } > > volatile uint8_t muh; > Die Variable muss vor der Benutzung deklariert werden. Oder darf erst nach der Deklaration benutzt werden. Deklariere die Variable vor der ISR oder stell die ISR dahinter. Kannst du dir aussuchen. mfg.
Hallo Thomas, Danke für die Antwort ich hatte die ISR allerdings zum Anfang am ende des Programms stehen und so hatte es auch nicht Funktioniert erst das verschieben der Variablen muh hinter das Include hatte Erfolg mit sich gebracht
Uwe schrieb: > Danke für die Antwort... Und? Mal im Ernst: Warum weißt du sowas nicht? Eigentlich sollte es doch selbstverständlich sein, daß man sich erstmal kundig macht über eine Programmiersprache, bevor man sie verwendet. Also zuvor ein passendes Buch lesen - und wenn man schon aus unangemessener Ahnungslosigkeit auf die Nase fällt, dann sollte man wenigstens nicht zu bequem sein, die Fehlermeldung des Compilers selbst zu lesen, anstatt selbige zu posten "error: 'muh' was not declared in this scope" und herumzufragen, ob sich jemand findet, der einen an die Hand nimmt. Ich frag dich mal, wie du es dir vorstellst, wie es weiter gehen soll in deinem Leben. Irgendwann wirst du bei Strafe deines Unterganges gezwungen sein, auf deinen eigenen Beinen zu stehen und deine Probleme selbst zu lösen - insbesondere dann, wenn so ein Problem so einfach ist und man dessen Lösung bereits ausgedruckt bekommen hat. Jim Meba war genervt von dir und hat deinen Zustand richtig erkannt - und hat dir den einzig richtigen Tip gegeben, nämlich dich zu belesen. Das kann ich hier nur wiederholen. Das Feld der Programmiererei ist SEHR VIEL weiter und größer als nur die richtige Stellung von Identifiern zu ihrer Verwendung zu beachten. Also schreib mal, wie du dir das Ganze eigentlich vorstellst. W.S.
> ... ich hatte die ISR allerdings zum Anfang am ende > des Programms stehen und so hatte es auch nicht Funktioniert erst das > verschieben der Variablen muh hinter das Include hatte Erfolg mit sich > gebracht Nicht das Du die falschen Schlüsse daraush ziehst: Entscheidend ist nicht, ob die Variable unmittelbar hinter den Includes steht. Vielmehr, ist entscheidend, dass die Variable vor jeder Funktion steht, welche diese Variable verwendet. Falls Du, im übrigen, die ISR einmal am Ende der Datei stehen hattest, und dies (abgesehen von den Includ-Dateien) die einzige Datei des Programmes war, dann hätte es gehen müssen . Da muss also was anderes die Ursache gewesen sein.
Tue Dir mal einen Gefallen und lerne ordentliche Programmierung. Am sinnvollsten ist es für Deine globalen Variablen ein eigenes Includefile zu erzeugen das dann überall eingebunden wird.
Hmm schrieb: >> ... ich hatte die ISR allerdings zum Anfang am ende ... > Vielmehr, ist entscheidend, dass die Variable vor jeder Funktion steht, > welche diese Variable verwendet. > Falls Du, im übrigen, die ISR einmal am Ende der Datei stehen hattest, > und dies (abgesehen von den Includ-Dateien) die einzige Datei des > Programmes war, dann hätte es gehen müssen . Da muss also was anderes > die Ursache gewesen sein. Wenn Ich mir den gepusteten Originalcode anschaue, dann ist muh, lokal in der Main-Routine und nicht global ( wenn Ich richtig sehe). Wenn dem so ist, dann kann doch die ISR die Variable nicht kennen, sondern ist nur für alle innerhalb main() sichtbar.
> Danke für die Antwort ich hatte die ISR allerdings zum Anfang am ende > des Programms stehen und so hatte es auch nicht Funktioniert erst das > verschieben der Variablen muh hinter das Include hatte Erfolg mit sich > gebracht Du weisst zwar nicht warum, aber Hauptsache es geht jetzt. Variablen, die von mehreren Funktionen benutzt werden, müssen nicht hinter den "includes" stehen, sondern global deklariert werden. Das war der Fehler. Deine Variablen sind aber lokal in main deklariert. was aber auf Grund der nicht vorhandenen Einrückung des Textes keiner, ausser Sebastian, sofort gesehen hat. Ich hoffe, du verstehst diesen Fehler. mfg.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.