Compiler Ergebnis unverständlich

Gast #283381
Lesenswert?
• ▲
▼
Hallo,

Umgebung Attiny2313 1Mhz, neuestes Winavr


wollte mal das Timingverhalten bei Portpins testen und hab mir dazu das
Assembler-Listing angeschaut.

#define LED_rot_an   (PORTD |= (1<<LED_rot))
#define LED_rot_aus  (PORTD &= ~(1<<LED_rot))

In der main Routine dann
   do
  {
    LED_rot_aus;
    LED_rot_an;

  }
   while (1);

Daraus erzeugt der Compiler fogendes:
   do
  {
    LED_rot_aus;
  78:  95 98         cbi  0x12, 5  ; 18
    LED_rot_an;
  7a:  95 9a         sbi  0x12, 5  ; 18
  7c:  95 98         cbi  0x12, 5  ; 18
  7e:  95 9a         sbi  0x12, 5  ; 18
  80:  fb cf         rjmp  .-10       ; 0x78


Wieso wird vor rjmp nochmals ein cbi und sbi gemacht, obwohl ich das
gar nicht programmiert habe.

Sollte es nicht so aussehen:
   do
  {
    LED_rot_aus;
  78:  95 98         cbi  0x12, 5  ; 18
    LED_rot_an;
  7a:  95 9a         sbi  0x12, 5  ; 18
  rjmp

Bitte erklärt mir das, danke

Volker
Gast
Lesenswert?
• ▲
▼
hab noch was vergessen:

#define LED_rot 5

natürlich macht es keinen Sinn eine LED mit so hoher Frequenz zu
takten, mir geht es lediglich ums Prinzip, dass der Compiler manches
wegoptimiert ist klar, aber dass er einiges hinzufügt verstehe ich
nicht ganz.

Viele Grüße

Volker
Gast
Lesenswert?
• ▲
▼
@A.K.

danke, mit -Os gehts wunderbar, nur verstehe ich eines immer noch
nicht, durch den Zusatz ist weder Geschwindigkeit noch Platz optimiert
(beides ist schlechter).

Nun ja, du hast mir ja ein Stichwort gegeben, werde mal auf die Suche
gehen.

Volker

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.