Hallo ich wollte das Programm USART mit Interrupt von dieser Hompage testen damit ich es dann für meine Zwecke umschreiben und verwenden kann. http://www.mikrocontroller.net/articles/Interrupt bekomme aber immter folgende Fehlermeldung: Build started 14.3.2008 at 00:51:15 avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -DF_CPU=18432000UL -Os -fsigned-char -MD -MP -MT main.o -MF dep/main.o.d -c ../main.c ../main.c: In function 'main': ../main.c:139: warning: passing argument 1 of 'get_string' makes integer from pointer without a cast ../main.c:148: warning: passing argument 1 of 'put_string' makes integer from pointer without a cast ../main.c:198: error: static declaration of '__vector_11' follows non-static declaration ../main.c:198: error: previous declaration of '__vector_11' was here ../main.c:229: error: static declaration of '__vector_12' follows non-static declaration ../main.c:229: error: previous declaration of '__vector_12' was here ../main.c:265: error: expected declaration or statement at end of input kann mir da vielleicht jemand helfen Danke Werner
Ich glaube kaum, dass diese beiden Funktionen
1 | void put_string(char); |
2 | void get_string(char); |
einen einzelnen Character als Argument übernehmen. Sieh dir nochmal die orignalen Funktionen genau an!
> ../Forum9.c:198: error: static declaration of '__vector_11' follows non-static
declaration
Der ist gemein, weil es ein Folgefehler ist.
Jetzt siehst du dir mal deine main() Funktion durch
und suchst dir für jede öffnede { die zugehörige schliessende }
Wenn du das tust, dann wirst du feststellen, dass mindestens
eine schliessende } fehlt.
Die noch vorhandene Code-Einrückung wird dich leiten.
PS: Das nächste mal kompilierst du ein kopiertes Programm
zuerst einmal um festzustellen, ob das klappt. Dann machst
du immer nur kleine Modifikationen und wirfst den Compiler
zwischendurch immer wieder mal an um zu sehen ob du bei
deinen Modifikationen bereits Fehler eingebaut hast oder
nicht.
Auf die Art stehst du nicht nach einer Editiersitzung mit
Fehlern da, die du nicht zuordnen kannst und von denen du
nicht weißt, ob sie nicht auch schon im Originalcode enthalten
waren (Deine waren es nicht. Die Fehler sind alle von dir
hausgemacht).
Aufgelösung: Zeile 42 & 43, es müßte heißen
1 | void put_string(char*); |
2 | void get_string(char*); |
und in main() fehlt die '}' zu while(1) oder main() itself.
Vielen Dank man sollte wenn man müde ist (und sowieso nichts mehr sieht) schlafen gehen und am nächsten Tag weitermachen. Ich hab zwar nach einem fehlenden Strichpunkt gesucht, weil da auch so eine komische Fehlermeldung kommt. Eine Frage hab ich noch, was muss man machen damit man auch Daten vom Atmega zum PC senden kann.
Im Grunde musst du nichts Spezielles machen. Das funktioniert genauso, wie wenn ein menschlicher Benutzer vor einem Terminal die Werte mitliest. Auf dem PC brauchst du natürlich ein Programm, welches die Daten entgegennimmt und sie dann wahlweise auswertet, anzeigt oder abspeichert. Aber auf µC ist da nichts spezielles. Einfach senden, so wie man über eine serielle Schnittstelle eben versendet. Dazu gibt es eine schöne Abhandlung im AVR-gcc Tutorial Das einzige worauf du mglw. aufpassen musst ist, daß du in die Sendung ein paar 'Hilfszeichen' einbaust, die dem PC-Programm helfen den Datenwust auseinanderzupfriemeln und ihm sagen, welcher Wert was darstellt.
Eigentlich meinte ich bezogen auf das Programm von folgendem Link: (UART mit Interrupt) http://www.mikrocontroller.net/articles/Interrupt
Werner wrote: > Eigentlich meinte ich bezogen auf das Programm von folgendem Link: > (UART mit Interrupt) > > http://www.mikrocontroller.net/articles/Interrupt Das ist jetzt aber nicht dein Ernst, oder? Dort gibt es eine fix fertige put_string Funktion, die du nur noch aufrufen brauchst.
oder man nimmt http://homepage.hispeed.ch/peterfleury/avr-software.html#libs die Lib... dann hat man auch keine Arbeit mehr...
Hätte geglaubt man muss diesen Interrupt "USART_TXC_vect" auch noch ausprogrammieren, aber es funkt ja eh. Habs dummerweise vorher nicht probiert. Die Library ist aber auch eine sehr gute Methode, vielen Dank
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.