Forum: Mikrocontroller und Digitale Elektronik Muss bei Misra Compiler Optimierung deaktiviert werden?


von Urlauber (Gast)


Lesenswert?

Hallo Spezialisten,

muss, wie im Betreff schon geschrieben, bei Einhaltung von MISRA-C,
beim Compiler die komplette Optimierung abgeschaltet werden,
oder nur spezielle Optimierungen?

Ohne irgendeiner Optimierung, erzeugt der Compiler (CodeWarrior, HCS08),
SEHR aufgeblähten Code, den man nur mühsam verfolgen kann.
Ausserdem werden dann Compilereigene Hilfsroutinen aufgerufen,
was recht undurchsichtig ist und ich eigentlich auch keine 
Bibliotheksroutinen verwenden wollte.

Genügt es nicht, solche Optimierungen wie z.B. das selbstätige
Zusammenfassen von Codestückchen in eigene Unterroutinen,
oder das Ein/Aufrollen von Schleifen zu deaktivieren?

lg
Urlauber

von Frank B. (f-baer)


Lesenswert?

MISRA sagt:

jegliche Codeoptimierung = superböse

von 2ter Gast (Gast)


Lesenswert?

Gegenfrage, steht irgendwo in den MISRA-C Guidelines, dass Optimierungen 
verboten sind? MISRA-C beschreibt doch "nur" zusätzliche Regeln zur 
Programmiersprache C; waren denn da noch Forderungen an den Compiler?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Frank Bär schrieb:
> jegliche Codeoptimierung = superböse
Irgendwie eine blöde Regelung, oder nicht?

Wenn der Compiler falsch implementiert ist, dann macht er auch ohne 
Optimierung Schrott...

Wenn die Optimierung richtig implementiert ist, dann macht der Code das, 
was die Sprachregeln verlangen...

von Martin (Gast)


Lesenswert?

Frank Bär schrieb:
> MISRA sagt:
> jegliche Codeoptimierung = superböse

Habe gerade nochmal die MISRA C 2004 durchgelesen. Ich sehe keinen 
Hinweis darauf, dass Optimierungen verboten sein sollten. Bitte belegen.

von Frank B. (f-baer)


Lesenswert?

2ter Gast schrieb:
> Gegenfrage, steht irgendwo in den MISRA-C Guidelines, dass Optimierungen
> verboten sind? MISRA-C beschreibt doch "nur" zusätzliche Regeln zur
> Programmiersprache C; waren denn da noch Forderungen an den Compiler?

Korrektur: MISRA selbst verlangt das nicht. Automotive verlangt i.d.R. 
MISRA-C UND Verzicht auf Codeoptimierung. Mea culpa.

@Lothar: Möchtest du dein Leben einer automatisierten Optimierung 
anvertrauen?

von raketenfred (Gast)


Lesenswert?

Möchtest du dein Leben einer automatisierten Umwandlung anvertrauen?

von Karl H. (kbuchegg)


Lesenswert?

Frank Bär schrieb:

> @Lothar: Möchtest du dein Leben einer automatisierten Optimierung
> anvertrauen?

Das ist ziemlich egal, denn ich muss mich auch darauf verlassen, dass 
der Compiler keinen Mist übersetzt und zb nicht mit den Registern 
durcheinanderkommt.

von Eneloop (Gast)


Lesenswert?

Auch zu bedenken: So ein Compiler wird eigentlich fast immer mit 
Optimierung eingesetzt, die optimierende Codererzeugung ist also 
vermutlich deutlich öfter und umfangreicher getestet als der abweichende 
Rest vom nicht-optimierenden Zweig.
Und: Manche Programmierfehler meckert der Compiler nur an, wenn er auch 
die ganzen Datenfluss-Analyse-Geschichten zur Optimierung anstellt.

von Erich (Gast)


Lesenswert?

>Automotive verlangt i.d.R. MISRA-C UND Verzicht auf Codeoptimierung

Das ist QUATSCH.

Die Misra rules verlangen an keiner Stelle den Verzicht auf 
Codeoptimierung.

Misra verlangt lediglich, bestimmte Programmierregeln einzuhalten, 
ausreichend Klammern zu setzen und bestimmte Konstrukte zu vermeiden.

http://www.ristancase.com/html/dac/manual/3.12.02%20MISRA-C%202004%20Rules.html

von Frank B. (f-baer)


Lesenswert?

Erich schrieb:
>>Automotive verlangt i.d.R. MISRA-C UND Verzicht auf Codeoptimierung
>
> Das ist QUATSCH.
>
> Die Misra rules verlangen an keiner Stelle den Verzicht auf
> Codeoptimierung.
>
> Misra verlangt lediglich, bestimmte Programmierregeln einzuhalten,
> ausreichend Klammern zu setzen und bestimmte Konstrukte zu vermeiden.
>
> http://www.ristancase.com/html/dac/manual/3.12.02%20MISRA-C%202004%20Rules.html

Muss ich jetzt wirklich die Bedeutung des Wörtchens "und" erklären?

von Frank B. (f-baer)


Lesenswert?

Eneloop schrieb:
> Auch zu bedenken: So ein Compiler wird eigentlich fast immer mit
> Optimierung eingesetzt, die optimierende Codererzeugung ist also
> vermutlich deutlich öfter und umfangreicher getestet als der abweichende
> Rest vom nicht-optimierenden Zweig.
> Und: Manche Programmierfehler meckert der Compiler nur an, wenn er auch
> die ganzen Datenfluss-Analyse-Geschichten zur Optimierung anstellt.

Das ist in dem Fall irrelevant. Für ISO26262-zertifizierte 
Automotive-Compiler gelten etwas strengere Spielregeln als für C99.

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.