Forum: Mikrocontroller und Digitale Elektronik ISR; Woher weiß ich das Vecotr mit _vect aufhört?


von Daniel Kraft (Gast)


Lesenswert?

Hallo,

ich beschäftige mich gerade mit den Interrupten und ISR.
Jetzt komme ich auf Frage, die ich nirgends per "google" beantwortet 
bekomme.

Es geht um folgendes:

Speziell geht es um die ISR:
Das Datenblatt habe ich mir angeschaut und genau deswegen komme ich auch 
zu den Fragen, ansonsten hätte ich vermutlich einfach kopiert ;)

http://www.atmel.com/images/atmel-2586-avr-8-bit-microcontroller-attiny25-attiny45-attiny85_datasheet.pdf

Die Interrupt-Vector-Tabelle ist auf Seite 48.
Mir geht es um PCINT0:
3 0x0002 PCINT0 Pin Change Interrupt Request 0

Woher weiß Arduino jetzt beim dem Befehl:
ISR (PCINT0_vect){}, das _vect auf die Vecotor Referenz geht?

Ich finde keine Dokumentation darüber, was "_vect" tut!
Desweiteren habe ich gesehen, das unterschiedliche AVRs PCINT0 andere 
ProgrammAdressen sind.

Könnte ich auch einfach folgendes schreiben?
ISR (0x0002){}

Wo liegt in Arduino die Referenz von der Variablen PCINT0_vect?
Das habe ich noch nicht geblickt.


Vielen Dank

von Falk B. (falk)


Lesenswert?

@ Daniel Kraft (Gast)

>Woher weiß Arduino jetzt beim dem Befehl:
>ISR (PCINT0_vect){}, das _vect auf die Vecotor Referenz geht?

Das haben die Leute vom avr gcc Compiler so festgelegt, der steckt auch 
im Arduino drin

>Ich finde keine Dokumentation darüber, was "_vect" tut!

Es ist ein Name, der so definiert wurde. Hat den nicht ganz kleinen 
Vorteil, daß man einfach die Namen der Vektoren aus dem Datenblatt + 
_vect hinschreiben kann.

>Desweiteren habe ich gesehen, das unterschiedliche AVRs PCINT0 andere
>ProgrammAdressen sind.

>Könnte ich auch einfach folgendes schreiben?
>ISR (0x0002){}

Lass es.

>Wo liegt in Arduino die Referenz von der Variablen PCINT0_vect?

In den Headerfiles tief im avr gcc.

von spess53 (Gast)


Lesenswert?

Hi

>Die Interrupt-Vector-Tabelle ist auf Seite 48.
>Mir geht es um PCINT0:
>3 0x0002 PCINT0 Pin Change Interrupt Request 0

>Woher weiß Arduino jetzt beim dem Befehl:
>ISR (PCINT0_vect){}, das _vect auf die Vecotor Referenz geht?

Deine Frage ist irgend wie unverständlich. Aber S.49 hast du auch schon 
angesehen?

MfG Spess

von Daniel Kraft (Gast)


Lesenswert?

Hallo Spess,

was soll ich auf Seite49 sehen?

Fragen:

1.Woher weiß Arduino, was PCINT0_vect ist, speziell _vect ist
2.Wo liegt die Referenz für die _vect Tabelle, gibt es sowas überhaupt?
3.Kann ich auch einfach ISR(0x0002){} schreiben und habe das gleiche 
Ergebnis

Das wären in Kurzform meine Fragen

von MikeH (Gast)


Lesenswert?

avrgcc Dokumentation

http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html

Da steht in der ersten Spalte welcher Name für welchen AVR µC verwendet 
werden muss.

von Daniel Kraft (Gast)


Lesenswert?

ich verstehs leider nicht was du mir damit sagen willst?
Bist du jetzt auf Seite 49 oder bei dem Link?

Bitte ein bisschen genauer erklären, sonst verstehe ich es einfach nicht

von Falk B. (falk)


Lesenswert?

C:\Arduino\hardware\tools\avr\avr\include\avr

aus iotn48.h

1
/* Interrupt Vectors */
2
/* Interrupt vector 0 is the reset vector. */
3
4
#define INT0_vect_num     1
5
#define INT0_vect         _VECTOR(1)
6
7
#define INT1_vect_num     2
8
#define INT1_vect         _VECTOR(2)
9
10
#define PCINT0_vect_num   3
11
#define PCINT0_vect       _VECTOR(3)
12
13
#define PCINT1_vect_num   4
14
#define PCINT1_vect       _VECTOR(4)
15
16
#define PCINT2_vect_num   5
17
#define PCINT2_vect       _VECTOR(5)
18
19
#define PCINT3_vect_num   6
20
#define PCINT3_vect       _VECTOR(6)

von Daniel Kraft (Gast)


Lesenswert?

und ISR(0x0002){} würde trotzdem auch gehen?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Daniel Kraft schrieb:
> 1.Woher weiß Arduino, was PCINT0_vect ist, speziell _vect ist

Arduino benutzt den GCC und die avr-libc, und die Leute von der
avr-libc haben sich dieses Schema mal ausgedacht.  Die Benamsung
ist dabei jeweils „hart am Datenblatt dran“ (mit dem angehängten
„_vect“, was du ja schon bemerkt hast).  Allerdings sind manchmal
die Datenblätter zwischen den AVRs nicht sehr konsistent, und haben
zuweilen auch seltsam anmutende Sonderzeichen in den Namen, die dann
für die Vektornamen weggelassen (Kommas) oder durch Unterstriche
ersetzt worden sind.  So heißt der Vektor für den Timerüberlauf des
Timer 0 beim ATtiny13 “TIM0_OVF_vect”, bei den meisten anderen AVRs
aber “TIMER0_OVF_vect”.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Daniel Kraft schrieb:
> und ISR(0x0002){} würde trotzdem auch gehen?

Nein, hat ja auch keiner behauptet.

Wenn du das partout auf unterster Ebene verstehen willst, dann musst
du dich durch die Headerfiles und ihre Makros schon selbst durchwühlen.

Für die reine Benutzung aus Anwendersicht können dir die Details der
Implementierung jedoch egal sein.

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.