Forum: Compiler & IDEs Teilweise optimieren via #pragma oder _attribute_


von Andi_T T. (andi_t)


Lesenswert?

Hallo zusammen,
hätte noch eine Frage zum Optimizer unter Atmel Studio 7 GCC 5.4.0
Ich möchte nur einige ISR Funktionen wie SPI bzgl. der 
Durchlaufgeschwindigkeit optimieren, den Rest des Codes für das 
Debugging aber nicht.
Es gibt wohl:
#pragma GCC push_options
#pragma GCC optimize (3)

ISR (SPI_STC_vect)
…
#pragma GCC reset_options //stellt die standard. Einstellungen wieder 
her
#pragma GCC pop_options

ODER

__attribute__((optimize("O3"))) ISR (SPI_STC_vect) ..

1 Frage: Beide sollte doch das gleiche Ergebnis liefern oder?
2 Frage: Push und pop bei #pragma kann man, wenn der Optimizer global 
aus ist, sich doch schenken oder?
3 Frage: Muss man hier sonst noch etwas berücksichtigen, was ich nicht 
auf dem Schirm habe?

Vielen Dank.
Andreas

von Oliver S. (oliverso)


Lesenswert?

Prinzipiell hast du recht.

Wenn es aber so auf das Timing ankommt, daß es nur mit -O3 in der ISR 
funktioniert, ist die ISR zum einen zu lang, zum anderen solltest du 
dich dann an das debuggen von optimierten Code gewöhnen. So schlimm ist 
das letztendlich gar nicht.

Oliver

von HörNichtAufMich (Gast)


Lesenswert?

> __attribute__((optimize("O3"))) ISR (SPI_STC_vect) ..

Das funktioniert im GCC nicht zuverlässig - hit&miss. Der Code dafür ist 
weder maintained noch war er jemals bugfrei.

Ich empfehle, Code, der gesondert optimiert werden soll in eine 
Extra-Datei auszulagern und für die Datei die Compiler-Parameter 
entsprechend deinen wünschen anzupassen.

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.