was das __io da vorne macht, weiss ich nicht.
Das @ könnte man so erreichen:
volatile PMSMflags_t* const fastFlags = (volatile PMSMflags_t*)0x1e;
und dann die Zugriffe anstatt
fastFlags = 5;
ändern in
*fastFlags = 5;
Auf Deutsch: anstatt den Compiler zu veranlassen, dass er
eine Variable auf eine bestimmte Speicheradresse legt, einen
Pointer vereinbaren, der die Adresse enthält und alle
Zugriffe über diesen Pointer führen.
Wird der Pointer selbst const gemacht, stehen die Chancen
gut, dass der Compiler die Pointervariable bei der
Optimierung los wird und der Code auch nicht schlechter
als beim Original ist.
Allerdings würde ich mir mal ganz genau ansehen, was da
eigentlich mit diesem ominösen 'fastFlags' gemacht wird,
bzw. welchem AVR Register das 0x1E entspricht und entweder
* nach einem Workaround mit 'offiziellen' gcc Register-Bezeichnungen
suchen
* den Code umschreiben, so dass das fastFlags nicht mehr gebraucht
wird. Dazu muesste man allerdings zunächst mal ergründen
was denn fastFlags macht, erst dann kann man entscheiden
ob man das umschreiben kann.