Forum: Mikrocontroller und Digitale Elektronik usart mit interrupt an Atmega8 avr-gcc


von Werner (Gast)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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!

von Gabriel W. (gagosoft)


Lesenswert?

ISR flasch geschrieben??

von Karl H. (kbuchegg)


Lesenswert?

> ../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).

von Hegy (Gast)


Lesenswert?

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.

von Werner (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Werner (Gast)


Lesenswert?

Eigentlich meinte ich bezogen auf das Programm von folgendem Link:
(UART mit Interrupt)

http://www.mikrocontroller.net/articles/Interrupt

von Karl H. (kbuchegg)


Lesenswert?

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.

von DOcean (Gast)


Lesenswert?

oder man nimmt

http://homepage.hispeed.ch/peterfleury/avr-software.html#libs

die Lib... dann hat man auch keine Arbeit mehr...

von Werner (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.