Forum: Mikrocontroller und Digitale Elektronik IAR-Compiler


von Timo Engelmann (Gast)


Lesenswert?

Hi,

hat einer von Euch schon mal mit dem IAR-Compiler
den AVR programmiert?
Ich hab da ein Problem mit der Codeoptimierung.
Das folgende C-Programm wird in den darunterliegenden
Assembler-Code umgesetzt. Aber der Asm-Code führt nicht die
mit dem C-Code programmierte Funktion aus.

Stell ich die Optimierung aus klappt es.

Danke für Eure Antworten,
Grüße Timo


//--- Includes:
#include<inavr.h>
#include<io8515.h>

//--- Macros:
#define ClearBit(ADRESS,BIT) (ADRESS&=~(1<<BIT))
#define SetBit(ADRESS,BIT) (ADRESS|=(1<<BIT))
#define TestBit(ADRESS,BIT) ((ADRESS&(1<<BIT)))

//--- Main Routine:
void main(void)
{
  unsigned char Temp=0;

  //--- µC Configuration:
  UBRR=51;       // Baudrate
  SetBit(UCR,3); // TX enable
  SetBit(UCR,4); // RX enable

  //--- Mainloop:
  while(1)
  {
    while(!TestBit(USR,7)); // Warten bis RXC-Flag gesetzt wurde
    Temp=UDR;               // Read out UART
    __no_operation();       // sonst löscht der Optimierer den folgenden 
Befehl
    UDR=Temp;               // Write to UART (ECHO)
  }
}



   *0000000D:main
   *0000000D:
   *0000000D:  unsigned char Temp=0;
   +0000000D: E010      LDI     R17,0x00          ; 0x00 = 0b00000000 = 
0
   *0000000E:  UBRR=51;
   +0000000E: E303      LDI     R16,0x33          ; 0x33 = 0b00110011 = 
51
   +0000000F: B909      OUT     0x9,R16
   *00000010:  SetBit(UCR,3);
   +00000010: 9A53      SBI     0xA,3
   +00000011: E001      LDI     R16,0x01          ; 0x01 = 0b00000001 = 
1
   *00000012:  SetBit(UCR,4);
   +00000012: 9A54      SBI     0xA,4
   +00000013: E001      LDI     R16,0x01          ; 0x01 = 0b00000001 = 
1
   *00000014:    while(!TestBit(USR,7))
   +00000014: 995F      SBIC    0xB,7
   *00000015:    Temp=UDR;
   +00000015: B11C      IN      R17,0xC
   *00000016:    __no_operation();
   +00000016: 0000      NOP
   *00000017:    UDR=Temp;
   +00000017: B91C      OUT     0xC,R17
   +00000018: CFFB      RJMP        while(!TestBit(USR,7))

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Hallo,

der Sourcecode ist anscheinend ein bisschen kaputt angekommen. 
"Sourcecode bitte nur als Anhang posten" steht nicht nur zum Spaß da! 
;-)

MfG
Andreas

von Timo Engelmann (Gast)


Lesenswert?

Joooppp,

sorry, werde es morgen im Geschäft nochmal posten.
Der interessante Teil, die Main-Loop ist aber gut zu lesen,
falls also einer eine Idee hat...

Bis dann.

Grüße Timo

von BA (Gast)


Lesenswert?

wofür ist dieses 7MB grosse IAR denn gut?

von Timo Engelmann (Gast)


Lesenswert?

Hi,

IAR ist eine Firma, die Tools für µC-Entwicklung
herstellen. Eines davon ist die Embedded-Workbench.
Das ist eine Entwicklungsumgebung, also Editor
und Compiler. Sollte eigentlich ein echt super
Tool sein, IMO ist es aber bei weitem nicht
das viele Geld wert!
Der Editor wird z.B. von UltraEdit um Längen
geschlagen. Der Compiler ist wohl nur ohne
Optimierung brauchbar...
Also wohl GCC. Leider ist die Doku zum GCC
nicht so sehr berauschend. Zumindest fand ich nix,
mit dem ich innerhalb von einer halben Stunde ein
lauffähiges HEX-File und OBJ-File machen konnte.
Bin wohl zu blöd?!

Grüße Timo

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.