Forum: Compiler & IDEs Laufzeitunterschied in verschiedenen IDEs


von Martin M. (Firma: INX) (marmus)


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:
1
#include <XMC1100.h>
2
3
void sleep()
4
{
5
 int temp1 = 0;
6
 while(temp1 < 500000) temp1++;
7
}
8
9
10
int main()
11
{
12
  //LEDS
13
  PORT1->IOCR0 |= (16UL<<3);
14
  PORT1->IOCR0 |= (16UL<<11);
15
16
  PORT0->IOCR4 |= (0x10<<11); //Pin 0.5 als Output
17
  PORT0->IOCR4 |= (0x00<<19); //Pin 0.6 als Input
18
  
19
  while(1)
20
  {
21
  PORT1->OUT ^= 0x02UL; //rechte LED: Programm laeuft!
22
  sleep();
23
24
  //PORT1->OUT |= 0x01UL;
25
26
  PORT0->OUT ^= (1<<5); //Pin 0.5 "blinkt" aehnlich der rechten LED
27
28
  if(PORT0->IN & (1<<6))
29
  {
30
    PORT1->OUT |= 0x01UL; //linke LED: Bruecke funktioniert
31
  }
32
  else
33
  {
34
    PORT1->OUT &= ~(0x01UL);
35
  }
36
  
37
}
38
return 0;
39
}

Gruß marmus

von Nop (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

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.