ISR; Woher weiß ich das Vecotr mit _vect aufhört?

Gast #4719411
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
#4719425
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.
Gast #4719427
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
Gast #4719437
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
#4719447
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)
Moderator Persönliche Seite #4719464
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”.
Moderator Persönliche Seite #4719467
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren