mikrocontroller.net

Forum: Compiler & IDEs Laufzeitunterschied in verschiedenen IDEs


Autor: Martin Muser (Firma: INX) (marmus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo geschätzte Forengemeinde!
Das hier ist mein erster Beitrag, allerdings lese ich schon etwas 
heimlich mit und mir konnte so schon sehr gut weiter geholfen werden. 
Nun zu meiner Frage:
Ich habe ein einfaches Programm in zwei verschiedenen IDEs laufen und es 
läuft unterschiedlich schnell dabei ab (abhängig von der IDE).
Ich konnte nicht herausfinden woran das liegt und deswegen habe ich mich 
hier nun auch mal zu Wort gemeldet.

Ich benutze einen XMC1100 auf einem XMC2Go-Board.
IDE1: DAVE 4.3.2
IDE2: µVision V5.24.2.0

Das Programm macht nichts anders als blinken auf Pin 1.1 (wenn es hier 
blinkt läuft das Programm). Pin 0.5 "blinkt" auch und hat eine 
Verbindung zu Pin 0.6 der als Eingang konfiguriert ist. Wenn nun dort 
ein Signal ankommt soll wiederum Led1 (Pin 1.0) blinken. Das Ding macht 
was es soll, aber kann mir den Geschwindigkeitsunterschied (des 
Blinkintervalls) in den unterschiedlichen IDEs nicht erklären.

Testprogramm auf dem Chip:
#include <XMC1100.h>

void sleep()
{
 int temp1 = 0;
 while(temp1 < 500000) temp1++;
}


int main()
{
  //LEDS
  PORT1->IOCR0 |= (16UL<<3);
  PORT1->IOCR0 |= (16UL<<11);

  PORT0->IOCR4 |= (0x10<<11); //Pin 0.5 als Output
  PORT0->IOCR4 |= (0x00<<19); //Pin 0.6 als Input
  
  while(1)
  {
  PORT1->OUT ^= 0x02UL; //rechte LED: Programm laeuft!
  sleep();

  //PORT1->OUT |= 0x01UL;

  PORT0->OUT ^= (1<<5); //Pin 0.5 "blinkt" aehnlich der rechten LED

  if(PORT0->IN & (1<<6))
  {
    PORT1->OUT |= 0x01UL; //linke LED: Bruecke funktioniert
  }
  else
  {
    PORT1->OUT &= ~(0x01UL);
  }
  
}
return 0;
}

Gruß marmus

Autor: Nop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Sleep-Funktion benutzt als Hochzählvariable eine lokale. Das darf 
der Compiler wegoptimieren, weil es funktional keinen Unterschied macht.

Deklarier Dein temp1 mal als globale Variable und dann mit volatile.

Guck außerdem, ob die IDE auch noch anhand der Einstellungen 
irgendwelchen Code vor main() generiert - manche IDEs tun das nämlich. 
Da könnten z.B. Sachen wie eventuelle Caches und so eingestellt werden.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin M. schrieb:
> Ich habe ein einfaches Programm in zwei verschiedenen IDEs laufen

Die IDEs werden unterschiedliche Compiler mit unterschiedlichen 
Compilereinstellungen und möglicherweise auch unterschiedlichen 
Standardlibraries verwenden, also ist es absolut nicht verwunderlich, 
wenn sich das Zeitverhalten des Programmes etwas unterscheidet.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.