www.mikrocontroller.net

Forum: Compiler & IDEs MSPGCC und IAR EW compilieren unterschiedlich !


Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Vielen Dank für eure bisherige Hilfe. Ich habe ein c Programm 
geschrieben das ein Hauptprogramm und eine Interrupt Service Routine 
hat, welche über einen Timer Interrupt ausgelöst wird.
Diese Programm habe ich einmal mit IAR Enbedded Workbench und einmal mit 
MSPGCC compilen lassen.

1. Festellung MSPCGG generiert 25% mehr Code.

2. Feststellung beim das Programm das mit IAR compiliert wurde läuft so 
wie es soll. Das Programm das ich mit MSPGCC compiliert habe läuft auch 
aber feherhaft. Mir kommt vor, daß es langsamer läuft.

an was kann das liegen?

Insbesondere diese Routine in der ISR wird feherhaft ausgeführt!

interrupt (TIMERA0_VECTOR) Timer_A(void)
{ .
  .
  .

if ((schritt>=9)&(schritt<40))
{
  for (x=0;x<0x1e;x++)
    {
    z=P1IN;       //K-Spuren ausblenden
    z&=0x3f;
    if ((P2IN==BitmusterP2[x])&(z==BitmusterP3[x]))
      {

        if (x==0)schritt=10;
        if ((x>0)&(x<0x0f)&(schritt==10))
          {
          schritt=schritt+x;

          c=0x0001;
          c=c<<(schritt-11);
          fehlern|=c;
          }


        if (x==0x0f)schritt=10;
        if ((x>0x0f)&(schritt==10))
          {
          schritt=schritt+x;
          c=0x0001;
          c=c<<(schritt-26);
          fehlerp|=c;
         }
     }
   }
 }

Warum kann das sein, das diese Routine manchmal richtig arbeitet und 
manchmal nicht???


Vielen Dank für eure Hilfe

MfG

Steffen

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Kompilier mal mit der Option -Os.

2. Keine Ahnung, du müsstest halt erst mal herausfnden was genau 
falsch läuft oder dir mal den vom Compiler erzeugten Assemblercode 
anschauen:
  msp430-gcc bla.c -g -mmcu=msp430x1121 -o bla.elf
  msp430-objdump -DS bla.elf --source > bla.lst
                                        ^^^^^^^

Autor: Thomas Fuchs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

zum einen habe ich bei einem größeren Programm (IAR 8kB) auch 
festgestellt das der MSPGCC wesentlich größeren Code produziert hat, 13 
kB für den gleichen Code! Habe versucht den Assembler Code zu 
vergleichen habe aber nach einer Stunde aufgegeben.
Zum anderen musst du bei Interrupt Routinen aufpassen wenn du mit ihr 
globale Variablen beeinflusst. Diese müssen "volatile" deklariert 
werden!!!

Thomas

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas, hast du mit Optimierung (-Os) kompiliert?

Autor: Thomas Fuchs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, werde das aber mal probieren.

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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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