Hallo, wie kann ich dem GCC erklären, dass zwei ISRs auf denselben Programmteil zeigen sollen? also sinngemäß sowas:
1 | ISR( INT6_vect, INT5_vect ) |
2 | {
|
3 | ...
|
4 | |
5 | }
|
Vielen Dank schonmal
|
|
Forum: Compiler & IDEs zwei ISRs mit selben CodeHallo, wie kann ich dem GCC erklären, dass zwei ISRs auf denselben Programmteil zeigen sollen? also sinngemäß sowas:
Vielen Dank schonmal Die beiden Interrupts ganz normal schreiben und darin die selbe Funktion aufrufen. Die Funktion kannst Du als inline deklarieren. indem du in der Vektortabelle die Adresse deiner Interruptroutine für beide Interrupts einträgst. Wie das in C geht, weiss ich nicht. 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
>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. >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? >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. :-) >>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 ;
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.
|
|