Hallo, ich habe ein prinzipielles Problem mit der verwendung von Interrupts und hoffe, dass mir Jemand helfen kann. In meinem Quellcode will ich, dass die Interruptroutine durch einen Taster ausgelöst wird Das erspare ich mir zu Testzwecken indem ich INT0 Softwaremäßig auslöse - funktioniert aber auch per Taster). Mein Problem: Wenn der Interrupt-0 ausgelöst wird, wird nicht der Code in : SIGNAL(SIG_INTERRUPT0) { ... } sondern der in main() ausgeführt. Ich habe schon jegliche Variante (Vor allem in verwendung der Interrupts des USARTs) versucht! Auch Beispielcode aus dem Netz hat bei mir nicht funktioniert. Liegt das an meinen FUSEs oder gar an meinem Prozessor? Ich verwende einen AVRmega8 mit AVR-GCC auf einem EmbedIT-Application-Board. Danke für schelle Hilfe!!!
> ...sondern der in main()
Das heißt, dass der default-Interruptvektor zugeschlagen hat.
Mit welcher Kommandozeile linkst du denn, steht da ein -mmcu=atmega8
mit drin?
Btw., ein externer Interrupt für einen Taster ist mittelmäßig
unsinnig, da mechanische Taster immer prellen. Da man das nur
zeitgesteuert entprellen kann, kann man für die Abfrage des
Tasters dann auch gleich den Timerinterrupt benutzen.
> Mit welcher Kommandozeile linkst du denn, steht da ein -mmcu=atmega8 > mit drin? Ich erstelle mein Programm wie folgt: C:\Programme\WinAVR\bin\avr-gcc.exe C:\HOME\MICROCONTROLLER\C\INTERRUPT-1\INTERRUPT-1.CPP -mmcu=atmega8 -oC:\HOME\MICROCONTROLLER\C\INTERRUPT-1\INTERRUPT-1.HEX (Ich weiß, besser währ es mit einem Makefile, damit werde ich mich in Zukunft noch befassen) > Btw., ein externer Interrupt für einen Taster ist mittelmäßig >unsinnig,... Du hast Recht! Habe es jetzt einfachheitshalber nur so gemacht um schnell mal zu Testzwecken einen Interrupt auszulösen. Sonst hättte ich die Interrupts vom USART verwendet, da das leider auch noch nicht geht, fange ich erst mal simpel an. Danke
Ups, und du bist dir sicher, dass bei obigem Konstrukt ein Intel-Hex-File rauskommt? Ich denke, dass du damit nur ein ELF-File produzierst. Klemmt eigentlich deine CAPSLOCK-Taste? :-) Ich bin mir übrigens gar nicht ganz sicher, ich denke mal, dass .CPP keine offizielle Dateiendung ist, die der GCC vernünftig interpretiert. .cpp würde er als C++ interpretieren, aber ist das eigentlich, was du willst? > Ich weiß, besser währ es mit einem Makefile Wenn du ein WinAVR hast, ist doch nun wirklich alles dabei, was du zur Erstellung eines Makefiles brauchst. Die ganzen dummen Kasperfallen werden dir dabei praktisch automatisch abgenommen. Aber Vorsicht!, bitte gewöhn' dir eine vernünftige Groß-/Klein- Schreibung an.
da hat Jörg vollkommen Recht. Einfacher als mit dem Demo Makefile oder mit MFile gehts nun wirklich nicht mehr. Du brauchst lediglich Deinen Controllertypen eintragen und Deine *.c Quelldateien. Desweiteren ist alles schön dokumentiert. Ciao, Kai
> Ich bin mir übrigens gar nicht ganz sicher, ich denke mal, dass > .CPP keine offizielle Dateiendung ist, die der GCC vernünftig > interpretiert. .cpp würde er als C++ interpretieren, aber ist > das eigentlich, was du willst? Übrigens würde auch .C als C++ interpretiert werden. Es müßte schon .c sein, damit er es als C-Code sieht. Alternativ kann man auch mit dem Kommandozeilenparameter -x die Sprache explizit angeben. Außerdem sollte man, wenn es wirklich C++ ist, mit g++ arbeiten statt mit gcc.
Ich habe jetzt endlich Zeit gefunden eure Tipps auszuprobieren. Der Tipp mit dem Makefile hat mein Problem SOFORT gelöst! Da wird gleich der Code gleich viel kleiner! Faulheit und kleine Fehler werden beim Programmieren echt böse bestraft ;-) DANKESCHÖN für die promte Hilfe!!!
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.