-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: avr-gcc: compilieren & hex

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2005
    Beiträge
    195

    avr-gcc: compilieren & hex

    Anzeige

    hallo

    ich hoffe ich geh euch nicht zu sehr auf den senkel mit einer erneuten anfänger frage,.. bin allerdings schon ganz schon stolz auf mich dass ich es bis hier her geschafft habe,... die verbindung von mac und atmega16 steht schon mal. (ich kann mit uisp die fusebits auslesen)

    jetzt komm ich zum nächsten problem: code rüber schieben.

    ich habe mir da für den anfang ein möglichst einfaches beispiel ausgesucht, dass ich es noch einigermaßen verstehen kann:
    Code:
    #define F_CPU 10000000UL
    #include <avr/io.h>
    #include <avr/delay.h>
    
    void delayms(uint16_t millis) {
      uint16_t loop;
      while ( millis ) {
        _delay_ms(1);
        millis--;
      }
    }
    
    int main(void) {
      DDRB |= 1<<PB0; /* set PB0 to output */
      while(1) {
        PORTB &= !(1<<PB0); /* LED on */
        delayms(100);
        PORTB |= 1<<PB0; /* LED off */
        delayms(900);
      }
      return 0;
    }
    (geklaut von hier)

    auf der hompage von der ich den code geklaut habe, wäre auch ein makefile. ich habe aber hier irgendwo mal gelesen, dass makefiles für den anfang nix sind, weil das auch nur noch eine zusätzliche fehlerquelle wäre.

    es gibt ja im wissensbereich auch einen artikel dazu. jedoch ist das da mit den mehreren dateien und interrupts so kompliziert, dass ich überhaupt gar nicht verstehen kann wie es funktioniert. das würde ich aber schon gerne.

    ich denke es wäre für euch ein leichtes mir die benötigeten schritte im terminal/bash zu zeigen. software sollte schon alles vorhanden sein (avr-gcc, uisp bzw. avrdude) und darum möchte ich euch auch bitten.

    das gigantische AVR GCC Tutorial war ich auch schon, da wird das aber auch nur mit makefiles gemacht.

    recht herzlichen dank

    SEIDL.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    ...und was ist deine Frage???

    Wie amn eine C-Datei kompiliert? Bei dem Beispiel, das du angegeben hast, wird das erläutert und was man da eintippen muss. Und zwar ohne make. Es ist auch eine Version abgedruckt, die die Quelle nicht auf 2 Dateien aufteilt sindern alles in einer Datei hat (Der Abschnitt heisst auch so). Die Quellen sind erklärt und zusätzlich kommentiert. Die Basis-Grundlagen, die im Handbuch zu finden sind, werden allerdings nicht wiederholt.
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2005
    Beiträge
    195
    Zitat Zitat von SprinterSB
    Bei dem Beispiel, das du angegeben hast, wird das erläutert und was man da eintippen muss. Und zwar ohne make.
    du meinst bei diesem beispiel? ich habe es jetzt zum 3. mal angeschaut,.. kann nix finden

    Zitat Zitat von SprinterSB
    Es ist auch eine Version abgedruckt, die die Quelle nicht auf 2 Dateien aufteilt sindern alles in einer Datei hat (Der Abschnitt heisst auch so).
    oh damn! ich habe gewusst, dass es diesen abschnitt gibt, aber dass das da nochmal erklärt wird habe ich irgendwie überlesen.

    dankeschön für den hinweis!

    SEIDL.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2006
    Ort
    Gratkorn
    Alter
    28
    Beiträge
    207
    Hallo

    Muss es nicht PORTB &= ~(1 << PB0) heißen?

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2005
    Beiträge
    195
    hallo

    ich habe jetzt noch mal ein problem:
    ich habe den code von diesem thread genommen und in die datei arg.c gepackt. nachdem avr-gcc ein bisschen gemeckert habe, habe ich noch ein define hinzugefügt und den pfad für delay.h geändert. das ganze sieht jetzt so aus:

    Code:
    #include <avr/io.h>
    #define F_CPU 10000000UL
    #include <util/delay.h> 
    
    void warte(int loop)  //loop: wartezeit in ms 
    { 
       int i; 
       for(i=0;i<loop;i++) _delay_ms(1); 
    } 
    
    int main(void) 
    { 
       DDRC =  0xFF; 
       DDRB = 0xFF; 
       DDRA = 0xFF; 
        
       for (;;) 
       { 
       PORTB = 0xFF; 
       PORTA = 0xFF; 
       PORTC = 0xFF; 
       warte(400); 
       PORTB = 0x00; 
       PORTA = 0x00; 
       PORTC = 0x00; 
       warte(400); 
       } 
    }
    wenn ich das jetzt compelliere mit

    avr-gcc arg.c -o arg.hex -mmcu=atmega16 -g -Os -Wl,--oformat=ihex

    kommt das hier raus:

    Code:
    :100000003694000051940000519400005194000077
    :10001000519400005194000051940000519400004C
    :10002000519400005194000051940000519400003C
    :10003000519400005194000051940000519400002C
    :10004000519400005194000051940000519400001C
    :0400500051940000C7
    :0C00540011241FBE1FE5D4E0DEBFCDBFAD
    :10006000106000E1B060BEE5F4E002C005900D92C2
    :060070000031B107D9F7D1
    :10007600106000E1B06001C01D920031B107E1F7E8
    :040086008E94000054
    :04008A000C940000D2
    :10008E00EF92FF920F931F93CF93DF9318161906DB
    :10009E005CF5EC010F2EF0E0EF2EF0E4FF2EFCE10C
    :1000AE000F2FF5E41F2FF02D20E030E040E85FE346
    :1000BE00C801B701E694000088231CF481E090E0AB
    :1000CE000FC020E03FEF4FE757E4C801B701A894F7
    :1000DE00000018161CF480E090E002C084EC99E059
    :1000EE000197F1F72197B1F6DF91CF911F910F9103
    :1000FE00FF90EF9008951FE5D4E0DEBFCDBF8FEFE8
    :10010E0084BB87BB8ABB8FEF88BB8BBB85BB80E96B
    :10011E0091E05594000018BA1BBA15BA80E991E027
    :06012E0055940000F0CF23
    :10013400A8E1B0E080E1F0E052960000DC01CB01E0
    :10014400898B9A8BAB8BBC8B2D8B3E8B4F8B588FB3
    :10015400BE016F5F7F4FCE014196249500008E0152
    :10016400075F1F4FB801CE0145962495000020E09B
    :1001740030E08981823008F421E02115310539F419
    :100184008985823010F421E030E0232B19F08FEFC1
    :100194009FEF08C0B801CE010196989500009927F9
    :0C01A40087FD9095E4E068966E960000E0
    :1001B000A8E1B0E0BEE1F0E052960000DC01CB0126
    :1001C000898B9A8BAB8BBC8B2D8B3E8B4F8B588F37
    :1001D000BE016F5F7F4FCE014196249500008E01D6
    :1001E000075F1F4FB801CE0145962495000020E01F
    :1001F00030E08981823008F421E02115310539F49D
    :100200008985823010F421E030E0232B19F081E061
    :1002100090E008C0B801CE0101969895000099279A
    :0C02200087FD9095E4E068966E96000063
    :10022C00FC01DB01408151812281622F6F7770E0EC
    :10023C00221F2227221F9381892F880F822B282F80
    :10024C003327991F9927991F11969C931197211564
    :10025C003105B9F5411551056105710519F482E0B7
    :10026C008C9308952E57304012962D933C931397F0
    :10027C00E7E0440F551F661F771FEA95D1F783E01F
    :10028C008C934030F0E05F07F0E06F07F0E47F07FD
    :10029C0090F4C901440F551F661F771F019740301A
    :1002AC0020E0520720E0620720E4720798F31296D0
    :1002BC008D939C931397FD014483558366837783B9
    :1002CC0008952F3F310591F02F573040FD011296C4
    :1002DC002D933C93139783E08C9387E0440F551F29
    :1002EC00661F771F8A95D1F77064E6CF41155105CB
    :1002FC006105710511F484E0B3CF64FF03C081E0A4
    :08030C008C93D9CF1C92D7CFCE
    :10031400A0E0B0E070E2F1E04F960000FC01DB01E8
    :1003240080E090E04081423008F481E0009739F4A5
    :100334005C91523010F481E090E0009719F061E094
    :1003440070E08EC09C01443009F487C0232B69F00F
    :10035400543009F47FC0892B41F011968C91682F99
    :1003640077278181681B71097BC080E090E044306D
    :1003740009F46DC0009749F5543009F465C000973D
    :10038400A1F49C01423009F45CC0232B39F09C0198
    :10039400523009F453C0232B09F047C080E090E0A9
    :1003A400423009F448C0009759F011968C91882383
    :1003B40021F48FEF9FEFBC0153C081E090E0FBCFAD
    :1003C4009C015230A9F1232B21F08181882389F7E4
    :1003D400F4CFD18011968C911197D81619F0DD20A5
    :1003E40041F7EBCF4281538112968D919C911397E3
    :1003F40084179507A4F348175907A4F0E480F580FF
    :100404000681178114964D915D916D917C9117979A
    :100414004E155F056007710710F3E416F50606072D
    :10042400170718F4DD2029F2C8CF60E070E018C087
    :1004340021E030E0C8CF81E090E0B5CF21E030E0AA
    :10044400AACF21E030E0A1CF81E090E098CF81E015
    :1004540090E090CF81E090E07ECF21E030E076CF55
    :0C046400CB01E7E0CDB7DEB76B960000DF
    :100470002F923F924F925F926F927F928F929F92B4
    :10048000AF92BF92CF92DF92EF92FF920F931F93A2
    :10049000CF93DF93CDB7DEB7CA1BDB0B0FB6F89453
    :0804A000DEBF0FBECDBF0994C1
    :1004A8002A88398848885F846E847D848C849B84FC
    :1004B800AA84B984C884DF80EE80FD800C811B810A
    :1004C800AA81B981CE0FD11D0FB6F894DEBF0FBE39
    :0604D800CDBFED01089507
    :00000001FF
    und das schaut halt irgendwie gar nicht so aus, wie das aus dem thread von oben. macht nix dachte ich mir, ich probier es trotzdem auf den atmega16 zu laden.

    uisp -dprog=avr910 -dserial=/dev/tty.usbserial -dpart=M16 --upload if=arg.hex

    dabei meldet er:

    Code:
    Programmer Information:
      Software Version: 3.1, Hardware Version: 1.0
    
    Atmel AVR ATmega16 is found.
    Uploading: flash
    ok. dann muss ich das ja noch verifyn mit:

    uisp -dprog=avr910 -dserial=/dev/tty.usbserial -dpart=M16 --verify if=arg.hex

    und dann meldet er:

    Code:
    Programmer Information:
      Software Version: 3.1, Hardware Version: 1.0
    
    Atmel AVR ATmega16 is found.
    Verifying: flash
    flash error at address 0x0: file=0x36, mem=0x04
    flash error at address 0x4: file=0x51, mem=0x00
    flash error at address 0x8: file=0x51, mem=0x00
    flash error at address 0xc: file=0x51, mem=0x00
    flash error at address 0x10: file=0x51, mem=0x00
    flash error at address 0x14: file=0x51, mem=0x00
    flash error at address 0x18: file=0x51, mem=0x00
    flash error at address 0x1c: file=0x51, mem=0x00
    flash error at address 0x20: file=0x51, mem=0x00
    flash error at address 0x24: file=0x51, mem=0x00
    flash error at address 0x28: file=0x .......
    (mit ner viel längeren liste flash errors.)

    was auch noch komisch ist: ich habe es auch schon mal mit dem hex code von dem thread von oben probiert. dann hat die led mal geblinkt. jetzt funktioniert es aber nicht mehr,.. es kommen auch wieder flash errors. mit zwischendurch löschen habe ich es auch schon probiert,.. leider negativ

    was mach ich falsch?

    dankeschön

    SEIDL. einerseits hoffend, dass es dieses mal ein richtiges problem ist (und ich nicht nur zu doof zum lesen bin), anderseits hoffend, dass es sich so leicht lösen lässt wie das erste

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Egal, ob das Prog abstürztz (bzw abstürzen würde) oder funktioniert(e), dürfte es beim Proggen keine Fehler geben. Mit dem Programmcode selbst kann das eigentlich nichts zu tun haben.

    Das hex-File sieht jedenfalls nicht gut aus. Scheinbar sind da noch debug-Informationen drinne...

    Versuch mal den Standard-Weg über elf32-avr anstatt ihex:

    Code:
    avr-gcc .... -o arg.elf (ohne -Wl...)
    avr-objcopy -j .text -j .data -O ihex arg.elf arg.hex
    avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex  arg.elf arg-eeprom.hex
    Disclaimer: none. Sue me.

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2005
    Beiträge
    195
    ok. der hex code sieht jetzt so aus:

    Code:
    :100000000C942A000C9445000C9445000C94450077
    :100010000C9445000C9445000C9445000C9445004C
    :100020000C9445000C9445000C9445000C9445003C
    :100030000C9445000C9445000C9445000C9445002C
    :100040000C9445000C9445000C9445000C9445001C
    :100050000C94450011241FBECFE5D4E0DEBFCDBF18
    :1000600010E0A0E6B0E0EEEDF4E002C005900D92E5
    :10007000A036B107D9F710E0A0E6B0E001C01D92AC
    :10008000A036B107E1F70C9482000C940000EF92C7
    :10009000FF920F931F93CF93DF93181619065CF509
    :1000A000EC010F2EF0E0EF2EF0E4FF2EFCE10F2F1D
    :1000B000F5E41F2FF02D20E030E040E85FE3C801B9
    :1000C000B7010E94D80088231CF481E090E00FC0A3
    :1000D00020E03FEF4FE757E4C801B7010E949A00C4
    :1000E00018161CF480E090E002C084EC99E00197BF
    :1000F000F1F72197B1F6DF91CF911F910F91FF900A
    :10010000EF900895CFE5D4E0DEBFCDBF8FEF84BB85
    :1001100087BB8ABB8FEF88BB8BBB85BB80E991E037
    :100120000E94470018BA1BBA15BA80E991E00E94F4
    :100130004700F0CFA8E1B0E0E0EAF0E00C9446021E
    :10014000DC01CB01898B9A8BAB8BBC8B2D8B3E8BCF
    :100150004F8B588FBE016F5F7F4FCE0141960E943B
    :1001600016018E01075F1F4FB801CE0145960E9410
    :10017000160120E030E08981823008F421E0211569
    :10018000310539F48985823010F421E030E0232BE9
    :1001900019F08FEF9FEF08C0B801CE0101960E94C1
    :1001A0008A01992787FD9095E4E068960C94620295
    :1001B000A8E1B0E0EEEDF0E00C944602DC01CB01EA
    :1001C000898B9A8BAB8BBC8B2D8B3E8B4F8B588F37
    :1001D000BE016F5F7F4FCE0141960E9416018E01D6
    :1001E000075F1F4FB801CE0145960E94160120E01F
    :1001F00030E08981823008F421E02115310539F49D
    :100200008985823010F421E030E0232B19F081E061
    :1002100090E008C0B801CE0101960E948A0199279A
    :1002200087FD9095E4E068960C946202FC01DB0186
    :10023000408151812281622F6F7770E0221F222737
    :10024000221F9381892F880F822B282F3327991FF4
    :100250009927991F11969C93119721153105B9F58E
    :10026000411551056105710519F482E08C930895DB
    :100270002E57304012962D933C931397E7E0440F8E
    :10028000551F661F771FEA95D1F783E08C934030A6
    :10029000F0E05F07F0E06F07F0E47F0790F4C9013A
    :1002A000440F551F661F771F0197403020E052070B
    :1002B00020E0620720E4720798F312968D939C93D6
    :1002C0001397FD01448355836683778308952F3FF9
    :1002D000310591F02F573040FD0112962D933C933C
    :1002E000139783E08C9387E0440F551F661F771F99
    :1002F0008A95D1F77064E6CF411551056105710506
    :1003000011F484E0B3CF64FF03C081E08C93D9CFB4
    :100310001C92D7CFA0E0B0E0E0E9F1E00C944302FA
    :10032000FC01DB0180E090E04081423008F481E094
    :10033000009739F45C91523010F481E090E000971E
    :1003400019F061E070E08EC09C01443009F487C070
    :10035000232B69F0543009F47FC0892B41F01196AA
    :100360008C91682F77278181681B71097BC080E0A1
    :1003700090E0443009F46DC0009749F5543009F419
    :1003800065C00097A1F49C01423009F45CC0232BA6
    :1003900039F09C01523009F453C0232B09F047C0B7
    :1003A00080E090E0423009F448C0009759F011967F
    :1003B0008C91882321F48FEF9FEFBC0153C081E023
    :1003C00090E0FBCF9C015230A9F1232B21F08181D9
    :1003D000882389F7F4CFD18011968C911197D81684
    :1003E00019F0DD2041F7EBCF4281538112968D91B8
    :1003F0009C91139784179507A4F348175907A4F005
    :10040000E480F5800681178114964D915D916D9180
    :100410007C9117974E155F056007710710F3E4167E
    :10042000F5060607170718F4DD2029F2C8CF60E0AB
    :1004300070E018C021E030E0C8CF81E090E0B5CF97
    :1004400021E030E0AACF21E030E0A1CF81E090E0D0
    :1004500098CF81E090E090CF81E090E07ECF21E0E6
    :1004600030E076CFCB01E7E0CDB7DEB70C945F028A
    :100470002F923F924F925F926F927F928F929F92B4
    :10048000AF92BF92CF92DF92EF92FF920F931F93A2
    :10049000CF93DF93CDB7DEB7CA1BDB0B0FB6F89453
    :1004A000DEBF0FBECDBF09942A88398848885F8493
    :1004B0006E847D848C849B84AA84B984C884DF8004
    :1004C000EE80FD800C811B81AA81B981CE0FD11DE8
    :0E04D0000FB6F894DEBF0FBECDBFED0108954C
    :00000001FF
    allerdings kommen immer noch die gleichen fehler.
    daran, dass ich den Programmer zwischen upload und verify abstecke kann es aber nicht liegen? (mein usb-rs232 adapter ist nicht so der aller beste)

    jetzt kommt nochmal eine doofe frage: was mach ich denn mit dem eeprom file?

    könnte es was helfen, wenn ich den seriellen port langsamer mache?

    habe jetzt noch ein bisschen getestet (ohne langsamer machen) die hex file, die ich mir aus dem thread kopiert habe, nimmt er inzwischen ohne murren,.. meine leider nicht.

    danke!

    SEIDL.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    11.02.2006
    Alter
    38
    Beiträge
    48
    Zitat Zitat von Razer
    Muss es nicht PORTB &= ~(1 << PB0) heißen?
    Ja, muss es!
    Wenn der Operator ! dasselbe machen sollte, dann ist das Zufall.

    Grüße,

    Hans
    Eintragen und Roboternetz-User in der Nähe finden: http://www.frappr.com/roboternetz

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Kiene Ahnung, woher das kommt...

    Bei mir sieht das eintsprechende aus arg.c erzeugte ihex so aus (gcc 3.4.x):
    Code:
    :100000000C942A000C9445000C9445000C94450077
    :100010000C9445000C9445000C9445000C9445004C
    :100020000C9445000C9445000C9445000C9445003C
    :100030000C9445000C9445000C9445000C9445002C
    :100040000C9445000C9445000C9445000C9445001C
    :100050000C94450011241FBECFE5D4E0DEBFCDBF18
    :1000600010E0A0E6B0E0ECEEF0E002C005900D92EA
    :10007000A036B107D9F710E0A0E6B0E001C01D92AC
    :10008000A036B107E1F70C945E000C940000CF930A
    :10009000DF93AC0120E030E02817390764F4A4ECCA
    :1000A000B9E0C0E0D0E0CD010197F1F72F5F3F4FFD
    :1000B00024173507C4F3DF91CF910895CFE5D4E03D
    :1000C000DEBFCDBF8FEF84BB87BB8ABB8FEF88BB02
    :1000D0008BBB85BB80E991E00E94470018BA1BBA30
    :0C00E00015BA80E991E00E944700F0CFC3
    :00000001FF
    Deines ist ja megamässig viel grösser und es steht immer noch sehr seltsames Zeug drinne...

    Des eeprom-File brauchst du (noch) nicht, weil du keine Daten ins eeprom lokatiert hast.
    Disclaimer: none. Sue me.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2005
    Beiträge
    195
    hallo nochmal,..

    ich nehme an, dass, wenn solange niemand antwortet, keine hoffnung auf eine lösung besteht?!

    ich werde es über das wochenende mit einem andern computer probieren, ich weiß ja jetzt was ich alles installieren muss, und wie.

    danke für die hilfe!

    SEIDL.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •