Forum: Mikrocontroller und Digitale Elektronik mega 168 winAVR und A-Studio4.18 Fehler im Vector 19 USART, RX


von Joachim B. (jar)


Lesenswert?

ich komme nicht mehr weiter

es gibt immer einen Vectorfehler:
../usart.c:383: warning: 'USART_RX' appears to be a misspelled signal 
handler

lt. Include soll das Vector 18 sein, aber lt Datenblatt Vector 19

einer von beiden muss falsch liegen

kennt das schon einer, habe nix gefunden zu dem Thema ausser das Atmel 
inkonsistent ist in der Bezeichnung, mal benennen sie jetztz alles mit 0 
und 1 für die mega die 2 usart haben, aber auch die die nur einen usart 
haben, mal nicht

in der iomx8 steht

#if defined (_AVR_ATmega88_) || defined (_AVR_ATmega168_)
/* USART Rx Complete */
#define USART_RX_vect      _VECTOR(18)
#define SIG_USART_RECV      _VECTOR(18)

/* USART, Data Register Empty */
#define USART_UDRE_vect      _VECTOR(19)
#define SIG_USART_DATA      _VECTOR(19)

aber im mega168 Datenblatt steht:
Vector no. Program address(2) Source Interrupt definition
19         0x0024             USART, RX USART Rx complete

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Vermutlich muß es heißen USART_RX_vect.

von Thomas E. (thomase)


Lesenswert?

Joachim B. schrieb:
> ich komme nicht mehr weiter
>
> es gibt immer einen Vectorfehler:
> ../usart.c:383: warning: 'USART_RX' appears to be a misspelled signal
> handler

Der Vektor heisst "USART_RX_vect", "USART_RX" kennt er nicht.

> lt. Include soll das Vector 18 sein, aber lt Datenblatt Vector 19
>
> einer von beiden muss falsch liegen

Vektor 1 ist bei Atmel der Reset-Vektor, die Macher vom GCC fangen mit 
Vektor 1 bei INT0 an zu zählen. Naja falsch. Zumindest ist es immer 
gleich.

> kennt das schon einer, habe nix gefunden zu dem Thema ausser das Atmel
> inkonsistent ist in der Bezeichnung, mal benennen sie jetztz alles mit 0
> und 1 für die mega die 2 usart haben, aber auch die die nur einen usart
> haben, mal nicht

Ich finde das auch bescheuert. Muss man mit leben.

> in der iomx8 steht
>
> #if defined (_AVR_ATmega88_) || defined (_AVR_ATmega168_)
> /* USART Rx Complete */
> #define USART_RX_vect      _VECTOR(18)
> #define SIG_USART_RECV      _VECTOR(18)
>
> /* USART, Data Register Empty */
> #define USART_UDRE_vect      _VECTOR(19)
> #define SIG_USART_DATA      _VECTOR(19)
>
> aber im mega168 Datenblatt steht:
> Vector no. Program address(2) Source Interrupt definition
> 19         0x0024             USART, RX USART Rx complete

Siehe oben.

mfg.

von Joachim B. (jar)


Lesenswert?

Thomas Eckmann schrieb:
> Der Vektor heisst "USART_RX_vect", "USART_RX" kennt er nicht.

nehmt die Fehlermeldung nicht so bierernst, da sind ja #defines zwischen 
;-)

ich habe in der ISR(alle Namen probiert, ändert ja nix am Unterschied 
18/19)

es geht um die Vectordifferenz das im Include auf Vector 18 gezeigt wird 
im Datenblatt auf Vector 19

habe gerade ein dejayvu

alte Sigma Linsen an neuer Canon Blendensteuerung auch 18/19 gibt error

: Bearbeitet durch User
von Georg G. (df2au)


Lesenswert?

Das Datenblatt beginnt die Zählung der Vektoren mit 1, das Include File 
mit 0.

Hast du das "_vect" hinten am Namen vergessen?

von Thomas E. (thomase)


Lesenswert?

Joachim B. schrieb:
> Thomas Eckmann schrieb:
>> Der Vektor heisst "USART_RX_vect", "USART_RX" kennt er nicht.
>
> nehmt die Fehlermeldung nicht so bierernst, da sind ja #defines zwischen
> ;-)
>
> ich habe in der ISR(alle Namen probiert, ändert ja nix am Unterschied
> 18/19)
>
> es geht um die Vectordifferenz das im Include auf Vector 18 gezeigt wird
> im Datenblatt auf Vector 19
>
> habe gerade ein dejayvu
>
> alte Sigma Linsen an neuer Canon Blendensteuerung auch 18/19 gibt error

Und was ist jetzt dein Problem?

mfg.

von Joachim B. (jar)


Lesenswert?

nein ich hatte alle Namen richtig durch und dann die Alias usw.

eigendlich egal wie die ISR wirklich heisst, es müsste ja _Vector 19 
eingetragen auch funktionieren ?

irgendwas soll an der Sprungweite geändert worden sein das es mit dem 
Interrupt und dem Rücksprung nicht mehr klappt, im Astudio 6 soll die 
Objectdatei richtig sein, weiss aber nicht ob das zusammenhängt....

von Karl H. (kbuchegg)


Lesenswert?

Joachim B. schrieb:
> nein ich hatte alle Namen richtig durch und dann die Alias usw.
>
> eigendlich egal wie die ISR wirklich heisst, es müsste ja _Vector 19
> eingetragen auch funktionieren ?

tus nicht.
Benutze den Namen aus dem Include File iomx8 und gut ists.
1
ISR( USART_RX_vect )
2
{
3
  char c = UDR;
4
}

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Thomas Eckmann schrieb:

>> einer von beiden muss falsch liegen
>
> Vektor 1 ist bei Atmel der Reset-Vektor, die Macher vom GCC fangen mit
> Vektor 1 bei INT0 an zu zählen. Naja falsch. Zumindest ist es immer
> gleich.

Irgendjemand dachte halt mal, es wäre eine gute Idee, in C-Manier die 
Nummerierung bei 0 starten zu lassen. Dann passt das ja auch wunderbar 
zu der Word-Adresse an der der Vector eingetragen werden muss. Die 
Nummer des Vektors ist automatisch die Adresse, an der der rjmp hin 
muss. Am Beispiel Mega8
1
Vector No. Program Address(2)  Source Interrupt Definition
2
1            0x000(1)           RESET External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset
3
2            0x001              INT0 External Interrupt Request 0
4
3            0x002              INT1 External Interrupt Request 1
5
4            0x003              TIMER2 COMP Timer/Counter2 Compare Match
6
5            0x004              TIMER2 OVF Timer/Counter2 Overflow
7
6            0x005              TIMER1 CAPT Timer/Counter1 Capture Event
8
7            0x006              TIMER1 COMPA Timer/Counter1 Compare Match A
9
...

Ich finde da eigentlich Atmels Vorgehen inkonsequent, denn an anderen 
Stellen hatten sie keinerlei Hemmungen, Nummerierungen bei 0 starten zu 
lassen. Zb Timer Modi

: Bearbeitet durch User
von Thomas E. (thomase)


Lesenswert?

Karl Heinz schrieb:
> Irgendjemand dachte halt mal, es wäre eine gute Idee, in C-Manier die
> Nummerierung bei 0 starten zu lassen. Dann passt das ja auch wunderbar
> zu der Word-Adresse an der der Vector eingetragen werden muss. Die
> Nummer des Vektors ist automatisch die Adresse, an der der rjmp hin
> muss. Am Beispiel Mega8

Das passt aber nur bis 8K Flash. Ab Mega168 sind die Vektoren 2 Word 
lang und dann geht es auch wieder nicht auf.

Man hätte die Vektoren auch nach den Planeten von innen nach aussen 
benennen können. Dann wäre allerdings bei 9 Schluss. Bei neueren 
Controllern sogar schon bei 8.

Aber als C-Programmierer muss man sich darum ja, Gott sei Dank, keine 
Gedanken machen.

mfg.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Thomas Eckmann schrieb:
> Karl Heinz schrieb:
>> Irgendjemand dachte halt mal, es wäre eine gute Idee, in C-Manier die
>> Nummerierung bei 0 starten zu lassen. Dann passt das ja auch wunderbar
>> zu der Word-Adresse an der der Vector eingetragen werden muss. Die
>> Nummer des Vektors ist automatisch die Adresse, an der der rjmp hin
>> muss. Am Beispiel Mega8
>
> Das passt aber nur bis 8K Flash. Ab Mega168 sind die Vektoren 2 Word
> lang und dann geht es auch wieder nicht auf.

Ja, ich weiß.
Drumm soll er ja auch die vorgegebenen Namen benutzen und nicht selbst 
die vectoren hinschreiben. Damit schiebt er dann die Schuld auf Atmel 
:-)


Schon klar. Das ganze ist ein "Pain in the ass". Zusammen mit so manch 
anderem, wobei diese Vector-Nummer Sache ja noch harmlos ist. Diese 
Inkonsistenz mit den UART Nummern wurde ja auch schon angesprochen. Dazu 
kommt, dass der Vektor bei den älteren Controllern UART_RX_vect (also 
ohne C für Complete) heißt, bei den neueren mit C, etc. etc.

Allerdings: jetzt würde es in Atmels Hand liegen, da mal etwas Ordnung 
in den Include Files rein zu bringen. Was aber wieder nicht so einfach 
ist, weil ja in den Datenblättern wieder die alten Namen benutzt werden 
.....

Wie du so schön gesagt hast
>... Muss man mit leben.
Dem ist nichts hinzuzufügen.

von Joachim B. (jar)


Lesenswert?

so keine Fehlermeldungen mehr ABER

leider auch keine Funktion, muss erst mal schauen ob nicht irgendwo im 
Code Schrott ist oder die Hardware nicht mehr mitspielt (heul)

Danke

von jar (Gast)


Lesenswert?

Hardware OK, SW OK, man muss natürlich die Interrupts auch einschalten, 
Danke, manchmal sieht man den Wald nicht....

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.