![Zitat](images/misc/quote_icon.png)
Zitat von
oderlachs
@Georg
Bestimmt kann ich Dich auch in Sachen Geany befragen ?
![Zwinkern](https://www.roboternetz.de/phpBB2/images/smiles/icon_wink.gif)
Heute kam mein 80x5x/AT89x5x Enwicklerboard aus Fernost an...Nun
Suche ich erst mal da nach ner Möglichkeit ein erstes Testprogramm drauf zu brennnen....muss sehen ob es geht.
Also um noch den Zusammenhang: Geany <-> Compiler <-> Makefile usw. zu verdeutlichen:
Du musst ja das Programm irgendwie auf den AVR bekommen. Dafür gibt es ein Programm namens "avrdude". Wenn du jetzt z.B. ein anderes Programmiergerät hast, muss avrdude mit anderen Parametern aufgerufen werden.
Du musst das Programm in Maschinensprache übersetzen, damit du es überhaupt übertragen kannst. Dafür gibt es den "gcc-avr" (die C-Bibliothek avr-libc gehört da auch dazu).
Mit diesen beiden Tools kannst du also Theoretisch schon AVRs programmieren: Du machst dir eine Datei namens "main.c" und schreibst da den Quellcode rein. Dann könntest du dir ein Terminal aufmachen (Strg + Alt + t), in deinen Projektordner wechseln (cd pfad/zum/ordner) und dort als erstes das Programm übersetzen, z.B.:
Code:
avr-gcc -g -Os -mmcu=<mcu type> -c file_name.c
dann linken
Code:
avr-gcc -g -mmcu=<mcu type> -o file_name.elf file_name.o
und dann noch ein hex-file daraus machen, damit man es flashen kann:
Code:
avr-objcopy -j .text -j .data -O ihex file_name.elf file_name.hex
Dann das hex-file noch Flashen:
Code:
avrdude -p <mcu_type> -P <port> -c <programming_device> -U flash:w:file_name.hex
Allerdings ist das alles sehr umständlich und macht keinen Spaß. Aus diesem Grund gibt es makefiles: man kann es aufrufen und ihm sagen, was es machen soll (z.B. "all", "flash", "program"), und das makefile führt dann die oben genannten Programme aus. Inzwischen gibt es viele verschiedene makefiles, und jedes funktioniert ein bisschen anders..
Wenn du jetzt so ein makefile in deinem Projektordner hast, brauchst du nur noch im Terminal in deinen Projektordner gehen (cd pfad/zum/ordner) und dort, je nach dem was du machen willst, folgende Befehle ausführen:
|
makefile im Ubuntuusers-Wiki:
|
makefile von Schorsch_76:
|
Übersetzen:
|
make all |
make all |
Programmieren:
|
make program |
make flash |
Aufräumen:
|
make clean |
make clean |
Das ist doch schon mal viel besser, als die vielen kryptischen Befehle oben ![Smile](https://www.roboternetz.de/phpBB2/images/smiles/icon_smile.gif)
Damit das funktioniert, muss das Makefile allerdings noch richtig konfiguriert werden: Wenn man sich die Befehle oben ansieht, merkt man, dass man Informationen wie den verwendeten Controller, Programmiergerät usw. angeben muss. Diese Informationen braucht das Makefile natürlich auch, damit es die obigen Befehle ausführen kann. Und deshalb müssen diese Informationen in das Makefile eingetragen werden.
Im Falle des Makefiles von Schorsch ist das dieser Bereich:
Code:
AVRDUDE=sudo avrdude -p m168 -c avrispmkii -P USB -e -U flash:w:
AVRSIZE=AVR-size
MCU=atmega168p
F_CPU=16000000
Die roten Dinge musst du also anpassen. Bei dem Makefile im Ubuntuusers-Wiki ist das:
Code:
MCU = atmega16
F_OSC = 3686400
AVRDUDE_PROGRAMMER = stk500
AVRDUDE_PORT = USB
Die sind zwar leichter anzugeben, dafür etwas etwas verstreuter im Makefile verteilt (genaueres: http://wiki.ubuntuusers.de/avr#Einri...klungsumgebung ).Wenn man jetzt z.B. "make all" ausführt, sieht das makefile nach, welcher Controller etc. eingetragen ist, und führt dann automatisch die oben hingeschrieben Befehle mit den passenden Einstellungen aus.
Ich hoffe das dir damit die Rolle des makefiles etwas klarer ist, und du gemerkt hast, dass diese beiden Sätze eigentlich nichts miteinander zu tun haben:
Bestimmt kann ich Dich auch in Sachen Geany befragen ?
![Wink](http://www.roboternetz.de/phpBB2/images/smiles/icon_wink.gif)
Heute kam mein 80x5x/AT89x5x Enwicklerboard aus Fernost an...
Denn das neue Board hat ja ein anderes Programmiergerät, je nach dem welchen du draufsteckst auch einen anderen Controller und auch eine andere Taktfrequenz. Das sind aber alles Dinge, die im Makefile (siehe rote Markierungen oben) einstellen kannst, und die mit Geany in keinem Zusammenhang stehen.
Die Rolle von Geany folgt jetzt:
Als erstes eignet sich Geany toll zum schreiben von C-Programmen, weil es Syntax-highlighting (Schlüsselwörter farbig darstellen) und noch viele weitere tolle Dinge beherrscht (Autovervollständigung, Suchen & Ersetzen, in mehreren Zeilen gleichzeitig schreiben etc.). Aber dieser Editor hat noch einen enormen Vorteil:
Bis jetzt wäre es ja so, dass du mit Geany deinen Quellcode schreibst (die Einstellungen im Makefile kannst du damit natürlich auch anpassen), aber um dein Programm auf den Controller zu bekommen musst du immer noch:
- Terminal öffnen
- mit "cd pfad/zum/ordner" in deinen Projektordner wechseln
- mit "make all" das Programm in maschinensprache übersetzen
- mit "make program" oder "make flash" (je nach verwendetem makefile) das Programm auf den Controller brennen
Das ist natürlich doof und umständlich, aber hier kommt Geany: Man kann nämlich einzelnen Buttons selbst Befehle zuordnen, die ausgeführt werden, wenn man den Button drückt. Also würe man sich idealerweise einen Button so belegen, dass er "make all" im Projektordner ausführt, und einen anderen, der "make program" bzw. "make flash" ausführt. Und diese Belegung kann man so einstellen: http://wiki.ubuntuusers.de/avr#Einri...klungsumgebung
Jetzt brauchst du eben nur noch die Buttons anklicken, oder alternativ "F8" für "make all" und "F9" für "make program/flash" drücken. Is doch super, oder? ![Smile](https://www.roboternetz.de/phpBB2/images/smiles/icon_smile.gif)
Noch eine Sache zum Schluss:
Unter Linux ist die Rechteverteilung sehr streng. Das ist sehr gut für die Sicherheit, und wohl der größte Grund, warum es bisher noch keine ernstzunehmende Schadsoftware gibt. Im Zuge dessen werden dir allerdings auch nicht die Rechte gegeben, um einfach so deine Programmiersoftware zu benutzen.
Das ist auch der Grund für folgende Zeile im Makefile von Schorsch:
Code:
AVRDUDE=sudo avrdude -p m168 -c avrispmkii -P USB -e -U flash:w:
Warscheinlich ist dir sudo ja bekannt: Man kann damit Root-Rechte bekommen, und darf mit dem ganzen System alles anstellen. Das ist aus zweierlei Sicht schlecht
- Man muss zum programmieren immer das Passwort eingeben
- das avrdude darf dann alles erdenkliche mit deinem System anstellen. Würde jemand Schadsoftware ist avrdude hineinprogrammieren, könnte das Programm deinen Computer zerlegen (könnte auch durch einen Fehler in der Software passieren)
Es wäre also sinnvoller, dir selbst die Rechte zu geben, mit dem Programmiergerät zu arbeiten (wenn du das Programm aufrufst, darf es alles, was du darfst). Dazu musst du:
- Einen Editor mit Root-Rechten öffnen: "gksudo gedit"
- Eine Neue Datei machen
- Dort folgenden Inhalt hineinkopieren:
Code:
# Atmel AVR ISP mkII
SUBSYSTEM=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2104", GROUP="plugdev", MODE="0660"
# usbprog bootloader
ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c62", GROUP="plugdev", MODE="0660"
# USBasp Programmer
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", GROUP="plugdev", MODE="0660"
# USBtiny Programmer
ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c9f", GROUP="plugdev", MODE="0660"
- Die Datei unter /etc/udev/rules.d/015_usbprog.rules speichern
- Das Programmiergerät ab- und wieder anstecken, falls es angesteckt war
Ich hoffe dir sind die Zusammenhänge jetzt etwas klarer ![Smile](https://www.roboternetz.de/phpBB2/images/smiles/icon_smile.gif)
Viele Grüße
-schumi-
PS: Könntest du noch verraten, welches Entwicklerboard du dir gegönnt hast? Dann könnte ich dir evtl. sagen, was die richtigen Einstellungen für das Makefile sind, und ob das mit den Linux-Rechten so klappt
Lesezeichen