Forum: Compiler & IDEs SimAVR und ISRs


von Wilhelm M. (wimalopaan)


Lesenswert?

Hallo zusammen,

mir ist gerade aufgefallen, dass die Möglichkeit, statische 
Elementfunktionen als ISRs zu definieren im SimAVR nicht funktioniert:

https://www.mikrocontroller.net/articles/AVR_Interrupt_Routinen_mit_C%2B%2B

Ist das ein bekannter Bug?

Ich benutze diese Möglichkeit zwar nicht, da es ja die Compiler-Warnung 
wegen eines falsch benannten ISR ergibt und die Code-Size sich gegenüber 
der "klassichen Variante", eine freie Funktion mit C-linkage zu 
schreiben, die die entsprechende Elementfunktion aufruft, nicht 
verkleinert. Trotzdem wäre es interessant zu wissen ...

Wilhelm

von Wilhelm M. (wimalopaan)


Lesenswert?

Na, kann auch nicht funktionieren, weil die Elementfunktion nicht in den 
I-Vector eingetragen wird .... jedenfalls nicht mit avr-g++-6.2.1

also kein Problem mit SimAVR!

Sorry for the noise.

von Wilhelm M. (wimalopaan)


Lesenswert?

Ist nicht mein Tag heute ...

Man darf keine in-class-definition für die ISR-Elementfunktion 
verwendet, sondern die muss out-of-class definiert werden. Dann gehts 
aus ...

Oh je ...

von Wilhelm M. (wimalopaan)


Lesenswert?

Und mit template-Elementfunktionen geht es wieder nicht ...

von Wilhelm M. (wimalopaan)


Lesenswert?

Vielleicht kann da jemand helfen: ich versehe die class-template 
Elementfunktion
1
template<typename MCUTimer>
2
class Timer final {
3
...
4
    static void timerTick() __asm__(STR(TIMER0_COMPA_vect)) __attribute__((__signal__, __used__, __externally_visible__));
5
...
6
};

mit den Attributen und mache eine abgesetzte Definition.

Mir leuchtet es schon ein, dass das problematisch sein kann, wenn ich 
unterschiedliche Parametrierungen meines Templates instanziiere.

Aber das es gar nicht in den I-vector kommt, ist mir unklar ...

Irgendwelche Hinweise?

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.