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