- Labornetzteil AliExpress         
Seite 3 von 5 ErsteErste 12345 LetzteLetzte
Ergebnis 21 bis 30 von 45

Thema: AVR Programmieren unter LINUX

  1. #21
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Anzeige

    Praxistest und DIY Projekte
    Ähm ... ich programmiere die AVRs immer unter Linux ....

    Ich installiere avr-gcc, make, meinen Editor (vim oder geany) und zum schubsen des Programmes auf den AVR den avrdude.

    Das wars ...

    Code:
    cat ../usbstepper/firmware/Makefile 
    CC=avr-g++
    RM=rm -f
    OBJCOPY=avr-objcopy
    AVRDUDE=sudo avrdude -p m168 -c avrispmkii -P USB
    AVRSIZE=avr-size
    
    OBJDUMP=avr-objdump
    
    MCU=atmega168p
    F_CPU=16000000
    
    CFLAGS=-g -DF_CPU=$(F_CPU) -Wall -Os --std=c++11 -mcall-prologues
    
    OBJ = main.o rs232.o parser.o timer1.o io.o
    
    BIN = usbstepper.bin
    HEX = usbstepper.hex
    MAP = usbstepper.map
    
    .phony: all
    
    all: $(OBJ)
            $(RM) $(HEX) $(BIN) $(MAP)
            $(CC) -mmcu=$(MCU) $(CFLAGS) -o $(BIN) -Wl,-Map,$(MAP) $(OBJ)
            $(OBJCOPY) -R .eeprom -O ihex $(BIN) $(HEX)
    
    %.o: %.cpp
            $(CC) -mmcu=$(MCU) $(CFLAGS) -c $<
    
    clean:
            $(RM) $(OBJ) $(BIN) $(HEX) $(MAP)
    
    flash: $(OBJ)
            $(AVRDUDE) -e -U flash:w:$(HEX)
    
    readfuse:
            $(AVRDUDE) lfuse:r:-:i -v
    
    writefuse:
            $(AVRDUDE) -U lfuse:w:0xde:m -U hfuse:w:0xdf:m -U efuse:w:0x01:m
    
    size:   $(BIN)
            $(AVRSIZE) -B $(BIN)
    
    dump:
            $(OBJDUMP) -d --demangle $(BIN)

  2. #22
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Zitat Zitat von Falte Beitrag anzeigen
    Ich wollte mal Fragen ob das Problem AVR auf Linux zu programmieren gelöst wurde.
    Es gab und gibt keine Probleme mit der AVR-Programmierung unter Linux. Und es gibt eigentlich gute Anleitungen, unter anderem bei den ubuntuusers. Die Einrichtung von avr-eclipse mag vielleicht nicht trivial sein, aber auch keine unüberwindbare Hürde. Und man braucht weder Eclipse noch avr-eclipse um AVRs unter Linux zu programmieren.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  3. #23
    Neuer Benutzer Öfters hier
    Registriert seit
    26.08.2014
    Beiträge
    10
    Vielen Dank für die schnelle Antwort erstmal. Aber...

    Ich habe bis jetzt immer nur unter Windows mit AVR Studio programmiert. Da ich aber zu Hause auf Linux umgestiegen bin versuche ich mich jetzt im Moment daran das ganze unter Linux laufen zu lassen damit ich nicht immer mit VMs arbeiten muss. AVRDUDE und die Pakete habe ich auch schon alle installiert aber irgendwie fehlt mir noch der letzte Kniff und das Wissen es richtig zu machen... Zum Beispiel konnte ich unter AVRStudio ganz einfach eine externe Makefile nutzen die zum Beispiel wie folgt aussieht:

    Code:
    CONTIKI = /home/benutzerxy/contiki-2.7/
    
    all: Micaz
    
    PROJECT_SOURCEFILES += ordner1/datei1.c ordner2/datei2.c
    
    include $(CONTIKI)/Makefile.include
    Jetzt ist eine Frage wie muss ich das dann unter Linux machen. Du hast ja schon eben ein Code-Schnipsel gepostet. Kannst du mir den vielleicht noch erklären? Und wie bekomme ich mehrere Ordner mit in das Projekt, dass ich quasi wie bei der Makefile aus AVRStudio das machen kann. Kann mir da jemand helfen?
    Besten Dank und beste Grüße,

    Falte

  4. #24
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    Blog-Einträge
    1
    Hallo Falte !

    heute habe ich erst mal wieder einen "Schock" unter Linux hinter mir.. Na ja ich bin komplett auf Ubuntu 14.04 umgestiegen...aber viel Insiderwissen fehlt noch...es macht sich langsam...Auch konnte ich meine Anleitungen die ich immer kopiert hatte nicht alle Retten.. CodeBlocks habe ich installiert...verzweifle am AVR Teil ebenso bei Eclipse...aber jetzt noch nicht probiert, da neuer Rechner dafür ins Hauskam..
    Ich krame grad noch beim Thema Arduino umher, was ich auch nebenbei nutze.
    Ich muss auch noch rausbekommen kann wie ich mein STK500 unter Linux nutzen kann..

    Gruss
    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  5. #25
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Zitat Zitat von Falte Beitrag anzeigen
    Jetzt ist eine Frage wie muss ich das dann unter Linux machen. Du hast ja schon eben ein Code-Schnipsel gepostet. Kannst du mir den vielleicht noch erklären? Und wie bekomme ich mehrere Ordner mit in das Projekt, dass ich quasi wie bei der Makefile aus AVRStudio das machen kann. Kann mir da jemand helfen?
    Besten Dank und beste Grüße,

    Falte
    Das ist nicht nur ein Codeschnipsel .. das ist das komplette Makefile für mein Projekt usbstepper.



    Hier mal eine Erklärung:

    ----- Festlegung der Befehle. avrgcc und der flags
    CC=avr-g++
    RM=rm -f
    OBJCOPY=avr-objcopy
    AVRDUDE=sudo avrdude -p m168 -c avrispmkii -P USB
    AVRSIZE=avr-size

    OBJDUMP=avr-objdump

    ----- meine MCU
    MCU=atmega168p
    F_CPU=16000000

    --- die CFlags stellen die Compileroptionen dar, hier setze ich eben die Defines für F_CPU und Compileroptionen
    CFLAGS=-g -DF_CPU=$(F_CPU) -Wall -Os --std=c++11 -mcall-prologues

    --- Hier werden die Objekte welche übersetzt werden müssen angegeben. *.o anstatt *.cpp. Wenn du eine Datei in einem Ordner hast einfach "lib/dasding.o". Ganze Biblitheken kann man natürlich auch einbinden. Siehe Makefile Tutoriol unter Google.

    OBJ = main.o rs232.o parser.o timer1.o io.o

    ---- Hier lege ich die Zieldateien fest
    BIN = usbstepper.bin
    HEX = usbstepper.hex
    MAP = usbstepper.map

    --- Hier wird festgelegt dass bei nur "make" eben "make all" gemacht werden soll
    .phony: all

    -- Das hauptziel: Erstellen der firmware. all hängt von den OBJ (siehe oben) ab
    --- Ich lösche die Zieldateien
    --- Und Kompiliere das elf file das ich unter BIN angegeben habe
    --- und erzeuge das hex file für den avrdude

    all: $(OBJ)
    $(RM) $(HEX) $(BIN) $(MAP)
    $(CC) -mmcu=$(MCU) $(CFLAGS) -o $(BIN) -Wl,-Map,$(MAP) $(OBJ)
    $(OBJCOPY) -R .eeprom -O ihex $(BIN) $(HEX)

    --- diese Regel sagt, dass für alle *.o in OBJ eine passende *.cpp datei übersetzt werden soll
    %.o: %.cpp
    $(CC) -mmcu=$(MCU) $(CFLAGS) -c $<

    --- clean = alles löschen ws der Kompiler erzeugt hat
    clean:
    $(RM) $(OBJ) $(BIN) $(HEX) $(MAP)

    --- flash: hängt auch von den OBJ sachen ab und schubst anschliessend das Hex file auf den AVR
    flash: $(OBJ)
    $(AVRDUDE) -e -U flash:w:$(HEX)

    --- hier kann ich ich die Fuses auslesen zur Kontrolle
    readfuse:
    $(AVRDUDE) lfuse:r:-:i -v

    --- hier kann ich meine Fuses setzen. In diesem Fall lfuse= 0xde / hfuse = 0xdf / efuse = 0x01 für externen Quarz und > 8 MHz. Siehe fuse calculatur bei google
    writefuse:
    $(AVRDUDE) -U lfuse:w:0xde:m -U hfuse:w:0xdf:m -U efuse:w:0x01:m

    --- hier kann ich die Größe auf dem Ziel ausgeben lassen.
    size: $(BIN)
    $(AVRSIZE) -B $(BIN)

    --- hier kann ich das elf file dumpen lassen und sehen welche funktionen wieviel Speicher brauchen
    dump:
    $(OBJDUMP) -d --demangle $(BIN)




    Das ganze nutzt man dann so:

    Code:
    georg@machariel ~/Dokumente/Entwicklung/upstream/Elektro/Projekte/usbstepper/firmware $ ls
    Makefile  atmega168p.h  fifo.h  io.cpp  io.h  main.cpp  motion.h  parser.cpp  parser.h  rs232.cpp  rs232.h  stepper.h  timer1.cpp  timer1.h  units.h
    georg@machariel ~/Dokumente/Entwicklung/upstream/Elektro/Projekte/usbstepper/firmware $ make 
    avr-g++ -mmcu=atmega168p -g -DF_CPU=16000000 -Wall -Os --std=c++11 -mcall-prologues  -c main.cpp
    avr-g++ -mmcu=atmega168p -g -DF_CPU=16000000 -Wall -Os --std=c++11 -mcall-prologues  -c rs232.cpp
    avr-g++ -mmcu=atmega168p -g -DF_CPU=16000000 -Wall -Os --std=c++11 -mcall-prologues  -c parser.cpp
    avr-g++ -mmcu=atmega168p -g -DF_CPU=16000000 -Wall -Os --std=c++11 -mcall-prologues  -c timer1.cpp
    avr-g++ -mmcu=atmega168p -g -DF_CPU=16000000 -Wall -Os --std=c++11 -mcall-prologues  -c io.cpp
    rm -f usbstepper.hex usbstepper.bin usbstepper.map
    avr-g++ -mmcu=atmega168p -g -DF_CPU=16000000 -Wall -Os --std=c++11 -mcall-prologues -o usbstepper.bin -Wl,-Map,usbstepper.map main.o rs232.o parser.o timer1.o io.o
    avr-objcopy -R .eeprom -O ihex usbstepper.bin usbstepper.hex
    georg@machariel ~/Dokumente/Entwicklung/upstream/Elektro/Projekte/usbstepper/firmware $ ls
    Makefile      fifo.h  io.h  main.cpp  motion.h    parser.h  rs232.cpp  rs232.o    timer1.cpp  timer1.o  usbstepper.bin  usbstepper.map
    atmega168p.h  io.cpp  io.o  main.o    parser.cpp  parser.o  rs232.h    stepper.h  timer1.h    units.h   usbstepper.hex
    georg@machariel ~/Dokumente/Entwicklung/upstream/Elektro/Projekte/usbstepper/firmware $ make flash
    sudo avrdude -p m168 -c avrispmkii -P USB -e -U flash:w:usbstepper.hex
    Passwort: 
    
    avrdude: stk500v2_command(): command failed
    avrdude: stk500v2_program_enable(): bad AVRISPmkII connection status: Unknown status 0x00
    avrdude: initialization failed, rc=-1
             Double check connections and try again, or use -F to override
             this check.
    
    
    avrdude done.  Thank you.
    
    make: *** [flash] Fehler 1
    georg@machariel ~/Dokumente/Entwicklung/upstream/Elektro/Projekte/usbstepper/firmware $ make size
    avr-size -B usbstepper.bin
       text    data     bss     dec     hex filename
       7626     308     370    8304    2070 usbstepper.bin
    georg@machariel ~/Dokumente/Entwicklung/upstream/Elektro/Projekte/usbstepper/firmware $
    Hier habe ich nur am avrispmkii keinen atmega168 dran....

    Wie ich die Dateien erstelle mit welchem Editor ist doch völlig egal.... Ein Makefile funktioniert immer, unabhängig davon welche "IDE" oder Editor ich einsetze.

    Viel mehr als hier [1] beschrieben mache ich nicht ...

    Wichtig bei makefiles ist, dass nur die Ziele wie "all" ganz vorne stehen bzw die Variablenzuweisungen weiter oben.

    Code:
    dump:
    -->Tab zum einrücken"        "$(OBJDDUMP)....
    [1] http://www.ijon.de/comp/tutorials/makefile.html

    Gruß
    Georg

  6. #26
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    Blog-Einträge
    1
    Hallo Georg !

    Vielen Dank für diese sehr gute Einweisung..und Übung macht den "Meister"...

    Gruss
    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  7. #27
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Jetzt wo ich das so geschrieben habe, stelle ich fest, daß das Makefile nicht optimal ist, aber es funktioniert und ist einfach. Es sollte noch ein Ziel namens hex geben ... Das ist aber ein kleiner Bug (oder feature? ). Mit dem Ziel hex wäre bei einem "make flash" und geänderten Quelldateien automatisch die Kompilierung angeworfen.

    @Falte: Makefile ist Makefile. Bei mir ist das ganze eben von dem Obj Files her aufgezogen und nicht von den C/C++ Files. Lässt sich aber durch die Regeln auch von den c/c++ Files her aufziehen.

    Heute abend kann ich mal
    a) mein hex target einbauen
    b) das ganze über c/c++ files her aufziehen.

    Die Entsprechung deiner PROJECT_SOURCES ist meine OBJ Variable. Vermutlich kannst du sogar das Makefile das du unter WinAVR genutzt hast auch unter Linux verwenden. WinAVR setzt auch auf die GNU Toolchain. Es muss auch CC usw. Variable geben. Die musst du halt anpassen. Kannst ja mal so ein Makefile hier posten (nicht nur Ausschnitte). Dann kann ich dir helfen.
    Geändert von schorsch_76 (27.08.2014 um 08:03 Uhr) Grund: Erweiterung der Antwort für Falte

  8. #28
    Neuer Benutzer Öfters hier
    Registriert seit
    26.08.2014
    Beiträge
    10
    Erstmal besten Dank Georg für dein Makefile und der Erklärung. Beim durcharbeiten deines Makefiles ist mir eine Frage aufgekommen. Und zwar frage ich mich welche Frequenz ich für die CPU einstellen muss. Also ich gehe davon aus, dass MCU der jeweilige Mikrocontroller ist und die F_CPU die entsprechende Frequenz richtig? Ich nutze ein Micaz-Modul mit einem ATmega128. Ein entsprechendes Datenblatt findet man hier. Im AVRStudio stelle ich keine explizite Frequenz ein. Kannst du mir da vielleicht auch nochmal helfen? Vielen Dank nochmal für deine Hilfe. Erste Hilfe die verständlich ist für mich.

    Besten Gruß,

    Falte

  9. #29
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Das define (-DF_CPU=16000000) stellt nichts ein. Es teilt dem Compiler und damit dem Programm die Taktfrequenz als ein define mit. Das define wird dann im Quelltext benutzt um bsp. Register für RS232 zu berechnen welche von der Taktrate der CPU abhängen. Die Takteinstellung geht klassisch über Quarz und die Fuses. Stimmt das define nicht, stimmen die Werte für meine RS232 Einstellung nicht und RS232 funktioniert dann nicht.

    MCU = Micro Controller Unit = Mikroprozessor

    EDIT:
    Wenn du das define F_CPU nicht im Quelltext brauchst, ist es nicht nötig. Wenn deine Fuseflags passen, brauchst du hier nicht zu drehen.
    Geändert von schorsch_76 (27.08.2014 um 08:42 Uhr)

  10. #30
    Neuer Benutzer Öfters hier
    Registriert seit
    26.08.2014
    Beiträge
    10
    Okay. Ich weiß noch nicht genau ob ich das verstanden habe. Wo bekomme ich denn raus, welche Frequenz ich da eingeben muss. Ist das die gleiche Frequenz wie die Baudrate, die ich zum Beispiel im GTKTerm einstelle wenn ich auf den USB-Port horche und mir die Ausgaben anschaue? Habe ein bischen Muffe davor die Boards kaputt zu machen, weil es nicht meine sind...

Seite 3 von 5 ErsteErste 12345 LetzteLetzte

Ähnliche Themen

  1. [AVR-gcc] Installation unter Linux
    Von Bääääär im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 13.05.2008, 11:16
  2. avr-gcc unter linux
    Von donni im Forum C - Programmierung (GCC u.a.)
    Antworten: 16
    Letzter Beitrag: 06.04.2006, 22:57
  3. AVR unter Linux programmieren?
    Von jagdfalke im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 20.03.2006, 21:48
  4. Bascom-AVR unter Linux?
    Von raptor_79 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 17.01.2006, 12:17
  5. gcc-avr unter Linux
    Von bluebrother im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 03.01.2005, 22:54

Berechtigungen

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

Solar Speicher und Akkus Tests