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))
Hallo, der Sourcecode ist anscheinend ein bisschen kaputt angekommen. "Sourcecode bitte nur als Anhang posten" steht nicht nur zum Spaß da! ;-) MfG Andreas
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.