www.mikrocontroller.net

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


Autor: Werner (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube kaum, dass diese beiden Funktionen
void put_string(char);
void get_string(char); 

einen einzelnen Character als Argument übernehmen.

Sieh dir nochmal die orignalen Funktionen genau an!

Autor: Gabriel Wegscheider (gagosoft)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ISR flasch geschrieben??

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Hegy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aufgelösung:
Zeile 42 & 43, es müßte heißen
void put_string(char*);
void get_string(char*);

und in main() fehlt die '}' zu while(1) oder main() itself.

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Werner (Gast)
Datum:

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

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: DOcean (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder man nimmt

http://homepage.hispeed.ch/peterfleury/avr-softwar...

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

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.