Hi, ich habe am Wochenende meine ersten richtigen Gehversuche in GCC und AVR gemacht. Verschiedene Unterroutinen ohne Parameteruebergabe und mit übergaben. Nun wollte ich gerne den Code per Avr Studio 4.08 Simulieren/Debuggen. Beim durch Steppen springt aber das Programm unwillkürlich in die Main Prozedur. Gibt es Probleme bei AVR Studio und GCC beim simulieren? Ich hoffe jemand kann mir da weiterhelfen . Mfg Dirk
Hallo Dirk, >Beim durch Steppen springt aber ds Programm unwillkürlich in die > Main Prozedur. Wie meinst du das ? Beim laden der cof-datei ist das normal ... Gruß Fiffi
Hi, ja ich lade die ext. coff Datei mit AVR Studio ..... wie kann ich den meinen C Code richtig simulieren mit AVr Studio 4.08? Mfg Dirk
Hallo Dirk, >wie kann ich den meinen C Code richtig simulieren mit AVr Studio > 4.08? Hast du ein konkretes Problem ? >Gibt es Probleme bei AVR Studio und GCC beim silulieren ? Nein, nur beim simuliern von Bootloadern, da das AVR-Studio nur die .text section lädt. Du must nur ein "make extcof" ausführen. (Sample-Makefile ...) Gruß Fiffi
Hi, ein aktuelles Prolembeispiel kann ich leider erst senden wenn ich Feierabend habe. ;) Ich sende mal ein Beispiel heute abend . Mfg Dirk
Hi, so Feierabend ;) Es kann sich natuerlich auch um ein Codefehler handeln, da ich noch blutiger C Anfaenger bin kann ich dieses leider nicht ausschliessen. Bitte habt also Nachsicht. Fehler: Das Programm arbeitet laut Simulator die Subs nicht ab ... sondern springt sofort wieder in die Mainroutine. MFG dirk Code: #include "avr/io.h" #include "avr/delay.h" #include "inttypes.h" uint8_t INDATA; uint8_t OUTDATA; uint8_t NUMBITS; void txbits(char OUTDATA) { char i; for ( i = 0; i < 8; i++) { sbi(PORTC,1); _delay_loop_2(1122); cbi(PORTC,1); _delay_loop_2(1122); if((OUTDATA & 1) == 1) { _delay_loop_2(2244); } } return; } void command(char INDATA) { sbi(PORTC, 1); _delay_loop_2(18000); cbi(PORTC, 1); _delay_loop_2(9000); txbits(0x82); txbits(0x17); txbits(INDATA); return; } int main(void) { outp (0xFF, DDRC); sbi(PORTC,0); cbi(PORTC,0); for (;;) { /* loop forever */ cbi(PORTC,0); command(0x06); sbi(PORTC,0); } }
Hallo Dirk, >Beim durch Steppen springt aber das Programm >unwillkürlich in die Main Prozedur. was meinst du damit ? Poste bitte mal den Code, Makefile, cof-datei ... Gruß Fiffi
Hi, @Fiffi ok das mache ich ..... erstmal warten bis Feierabend ist. Was ich damit meine ist: In der Main Procedure rufe ich die Funktion Command mit dem Wert 0x06 auf. Im Simulator springt er dann in die Funktion, sobald er aber ein Befehl in der Funtkion abarbeiten soll springt er wieder in die Endlossschleife von der Mainprozedure. Er arbeitet garnicht die Befehle in den Unterprogrammen (command, Txbits ab) Aber ich sende heute abend mal meine Coff usw. Mfg Dirk
Hallo Dirk, mach mal bitte ein Archiv daraus, was jeder öffnen kann ... (zip, tar.gz, ...) Gruß Fiffi
Hallo Dirk, bei mir verhält sich dein Programm genauso wie bei dir. Der "Unsinn" kommt vom GCC. (bin mal im assembler durchgesteppt) Der erzeugt Code ergibt überhaupt keinen Sinn ... Das Problem kommt von den delay Routinen. Diese habe ich auch noch nie verwendet. Ich Anhang befindet sich eine Version (ohne delays) die bei mir vernünfig läuft. Ich würde Zip-Datei mal an die Entwickler senden... Gruß Fiffi
Hi, ich bedanke mich fuer deine Hilfe. Ich werde mal den Entwickler mein zip file zukommen lassen. Mfg Dirk
Die delay()-Routinen sind inline-Funktionen. Sowas kann COFF nicht darstellen, da in diesem Falle Code generiert wird, der nicht mehr zur C-Datei, sondern zu einer .h-Datei gehört. Wenn Du mal ein avr-objdump -g auf das ELF-File machst, müßtest Du das ganz gut erkennen können, daß innerhalb einer Funktion zwischen verschiedenen Dateien umgeschaltet wird. COFF kann diese Umschaltung nicht, da sich dort die Zeilennummern einer Funktion immer auf den Anfang der Funktion beziehen und damit immer auf die Quelldatei, in der der Funktionskopf stand.
Hi, wie kann man den sowas sonst Bewerkstelligen? oder gibt es da keine Moeglichkeit? Mfg Dirk
Einen richtigen Debugger benutzen, der ein vernünftiges Objektformat unterstützt. ;-) (Ja, ich weiß, ist nicht ganz so einfach, wie sich das schreibt...)
Hi, so da ich ja noch leider blutiger Anfaenger bin und fuer ASM fand ich AVR Studio Simulator extrem gut..... Welchen Debugger soll ich den nutzen fuer meinen C Code ? Gdb insight ? Mfg Dirk
Zumindest unterstützt GDB das ELF-Format in vollem Maße. ;-) Aber mir ist schon klar, daß die Wahl der möglichen Simulatoren und Emulatoren für den GDB nicht sonderlich üppig ist (SimulAVR, AVaRICE).
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.