Gast
#2194235
Hallo, wie kann ich dem GCC erklären, dass zwei ISRs auf denselben Programmteil zeigen sollen? also sinngemäß sowas:
1 | |
2 | |
3 | |
4 | |
5 | |
Vielen Dank schonmal
|
Anzeige
|
zwei ISRs mit selben Code
Gast
#2194235
Hallo, wie kann ich dem GCC erklären, dass zwei ISRs auf denselben Programmteil zeigen sollen? also sinngemäß sowas:
Vielen Dank schonmal
Gast
#2194248
Die beiden Interrupts ganz normal schreiben und darin die selbe Funktion aufrufen. Die Funktion kannst Du als inline deklarieren.
Gast
#2194251
indem du in der Vektortabelle die Adresse deiner Interruptroutine für beide Interrupts einträgst. Wie das in C geht, weiss ich nicht.
Gast
#2194273
Wenn es um AVRs geht, so:
Gast
#2194279
Mist, zu langsam... Richtig richtig wäre außerdem:
Das oben ist deprecated. Matthias Lipinsky schrieb: > ISR( INT6_vect, INT5_vect ) > { > ... > > } Ohne es getestet zu haben, versuchs mal so
Gast
#2194316
>ISR_ALIAS(INT6_vect, INT5_vect);
Danke für den Hinweis:
Ich habs jetzt so gemacht:
Das erzeugt zwar einen witzigen Jump auf die folgende Addresse, aber soll mal nicht stören:
Vielen Dank.
Gast
#2194337
>Das erzeugt (...) einen witzigen Jump auf die folgende Addresse
Mmh. Dann wäre die Variante mit der inline Funktion vielleicht doch eine
Alternative.
Guru schrieb: >>Das erzeugt (...) einen witzigen Jump auf die folgende Addresse > > Mmh. Dann wäre die Variante mit der inline Funktion vielleicht doch eine > Alternative. Den kompletten ISR-Code doppelt haben, nur um 2 Takte zu sparen?
Gast
#2194360
>Den kompletten ISR-Code doppelt haben, nur um 2 Takte zu sparen?
Warum nicht, falls es auf die zwei Takte für den Jump ankommt.
Aber verdoppeln bräuchte man mit inline den Code ja auch nicht.
Guru schrieb: > Aber verdoppeln bräuchte man mit inline den Code ja auch nicht. Nein? Zeig mal wie das gehen soll. Matthias Lipinsky schrieb: > Das erzeugt zwar einen witzigen Jump auf die folgende Addresse, aber > soll mal nicht stören: > [avrasm] > @000000B2: __vector_6 > 114: ISR_ALIAS( INT5_vect, INT6_vect ); > +000000B2: 940C00B4 JMP 0x000000B4 Jump > @000000B4: __vector_7 Wenn der dich stört, dann solltest du beim Linken die Option -Wl,--defsym=__vector_6=__vector_7 angeben. Das ist zwar komplett unportabel, sollte dir aber den JMP sparen. :-)
Gast
#2194475
>>Guru schrieb: >> Aber verdoppeln bräuchte man mit inline den Code ja auch nicht. >Stefan Ernst schrieb: >Nein? Zeig mal wie das gehen soll. Nein. Zeig ich nicht. ;-) Nee, hast recht, falls Du das sagen wolltest: mit Inline wäre der Code natürlich doppelt. Aber dann bleibt: >Den kompletten ISR-Code doppelt haben, nur um 2 Takte zu sparen? Warum nicht, falls es auf die zwei Takte für den Jump ankommt. Matthias Lipinsky schrieb: > Ich habs jetzt so gemacht:ISR_ALIAS( INT5_vect, INT6_vect ); > ISR ( INT6_vect ) > { > ... Mach besser so: Beitrag "Re: zwei ISRs mit selben Code" Dann ist der Sprung gleich richtig. Peter P.S.: Da fehlt ein ;
Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|