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
@ 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.
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
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
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.
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
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)
|
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”.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.