Einrichten der AVR-C-Programmierung unter Ubuntu-Linux ?· Ubuntu-Linux 12.04 Ein Erfahrungsbericht…

Embed Size (px)

Text of Einrichten der AVR-C-Programmierung unter Ubuntu-Linux ?· Ubuntu-Linux 12.04 Ein...

  • Dieter Holzhuser http://www.system-maker.de

    E-Mail: diehol@system-maker.de

    30.05.2011

    berarbeitung 27.02.2013

    berarbeitung 10.03.2013

    Einrichten der AVR-C-Programmierung unter Ubuntu-Linux 12.04

    Ein Erfahrungsbericht

    VorbemerkungDer Auslser fr die vorliegende berarbeitung war ein Problem bei den fertigen deb-Paketen, die ich bisher fr die Installation von avr-gcc und avrdude benutzt habe. Bei Atmel habe ich einen um Lngen besseren Ersatz gefunden, und zwar eine Toolchain mit hervorragender Dokumentation, die sich durch einfaches Entpacken installieren lies. Das Paket avrdude wird unabhngig davon aus dem Ubuntu Software-Center installiert.

    Ich werde zuknftig Programme nur noch mit Code::Blocks entwickeln. Daher ist der Editor gedit als Mini-Entwicklungsumgebung in diesem Artikel kein Thema mehr.

    Es gibt also Grnde genug fr eine berarbeitung.

    Worum es gehtIch schreibe C-Programme, und zwar hauptschlich fr den Mikrocontroller ATmega32 aus der AVR-Familie von Atmel. Die ganze Entwicklung findet auf dem PC statt. Weil der C-Code in den Maschinencode des Mikrocontrollers bersetzt (cross-compiliert) wird, muss das Programm in den Speicher des Mikrocontrollers bertragen werden, denn nur dort kann es laufen. Zwecks bertragung sind PC und Mikrocontroller durch einen Programmieradapter verbunden.

    Ich verwende den AVR ISP mk II von Atmel (siehe Bild oben), der bei Reichelt ( www.reichelt.de ) fr etwa 40 zu haben ist. Er ist an eine USB-Schnittstelle des PC und an das SPI (Serial Interface) des Mikrocontrollers angeschlossen.

    1

    http://www.system-maker.de/http://www.reichelt.de/

  • Man sollte den Betrag investieren und sich nicht mit Bastellsungen herumschlagen, die meistens fr die parallele oder serielle Schnittstelle gemacht sind. Solche Schnittstellen hat ein moderner PC ohnehin nicht mehr.

    Der Artikel handelt von meinen Erfahrungen bei der Einrichtung der integrierten Entwicklungsumgebung (IDE) Code::Blocks fr die Entwicklung von C-Programmen und die Programmierung von AVR-Mikrocontrollern. Unter Letzterem ist das Schreiben von Maschinencode in den Flash-Speicher des Mikrocontrollers zu verstehen.

    Bentigte ProgrammeIm Mittelpunkt stehen der C Cross Compiler avr-gcc mit seinen Bibliotheken und der Programmer avrdude.

    avr-gcc liefert als Endprodukt eine Datei *.hex, whrend avrdude mit dieser Datei den Mikrocontroller programmiert.

    Es ist allerdings nicht einfach, den avr-gcc und auch avrdude so aufzurufen, dass die Programme genau das tun, was sie sollen. Das liegt an den unglaublich vielen Aufrufoptionen, was eine Eigenart aller Compiler ist, nicht nur von avr-gcc. Es wrde viel zu viel Arbeit machen, diese Parameter immer richtig im Terminal einzugeben. Deshalb bringt Linux das Programm make mit, das komplizierte Aufrufe erledigt, indem es die Datei makefile auswertet, die der Anwender nach bestimmten Regeln zu schreiben hat. Damit muss man sich aber nicht abgeben, wenn man Code::Blocks eingerichtet hat.

    Code::Blocks ist eine Cross-Compile-Plattform, die mit einer Reihe von Cross-Compilern zusammenarbeiten kann. Der avr-gcc ist einer davon. Auch Tools knnen generiert werden.

    Installation und Konfiguration der Programme

    avr-gccEs handelt sich nicht um ein Programm, sondern um mehrere und eine ganze Reihe von Dateien. Alles zusammen wird auch als Toolchain bezeichnet. Es gibt viele Mglichkeiten die AVR-Toolchain zu installieren. Manche Pakete installieren den Compiler und den Programmer avrdude in einem Vorgang. Keine der Mglichkeiten, die ich probiert habe, war vllig problemlos, bis auf die Toolchain, die Atmel zum Download anbietet, und zwar unterhttp://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx

    Weil der ATmega32 ein 8-Bit Mikrocontroller ist, habe ich Atmel AVR 8-bit Toolchain 3.4.1 - Linux 32-bit heruntergeladen. Das geht aber nicht ohne Registrierung. Man gibt Name und E-Mail-Adresse an und erhlt eine E-Mail mit dem eigentlichen Link fr den Download.

    Die Installationsanleitung (pdf) kann man sich ohne Registrierung ansehen.

    Was dann folgt, kann man kaum Installation nennen. Die heruntergeladene Datei wird in das gewhlte Installationsverzeichnis verschoben (bei mir /usr/local/bin ) und dort entpackt. Das war's schon fast. Die ganze Toolchain befindet sich nun im Verzeichnis avr8-gnu-toolchain-3.4.1.798-linux.any.x86 Weil mir der Name zu lang war, habe das Verzeichnis in avrtoolchain umbenannt.

    Die Orte von avr-gcc, von der Dokumentation und von den Header-Dateien, die beim Programmieren ggf. zu includieren sind, sollte man kennen:

    In /usr/local/bin/avrtoolchain/bin befindet sich avr-gcc Man muss den Pfad nicht zum Suchpfad in der Umgebungsvariablen PATH machen, wie es die Installationsanleitung fordert, wenn man ihn in Code::Blocks setzt (s.u.)

    In /usr/local/bin/avrtoolchain/avr/include und in drei Verzeichnissen darunter stehen die Header-Dateien, die in Programmen relativ zu diesem Pfad eingebunden werden, z.B. #include oder #include .

    2

    http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx

  • Die Dokumentation ist in /usr/local/bin/avrtoolchain/doc/avr-libc/avr-libc-user-manual/index.html zu finden. Eine pdf-Datei des Manuals gibt es auch. Die Doku drfte keine Wnsche offen lassen.

    avrdudeDen Programmer avrdude gibt es als Paket im Ubuntu Software-Center. Die Installation ist ohne Besonderheiten. Aufgerufen wird das Programm mit /usr/bin/avrdude und einer ganzen Reihe von Optionen. Die vollstndige Zusammenstellung ist im Manual enthalten, das mit man avrdude im Terminal erscheint.

    Die Aufrufe von avrdude, die ich brauche, habe ich in Code::Blocks als Tool konfiguriert (siehe Code::Blocks Tools).

    Eine ziemlich unangenehme Besonderheit hat avrdude aber doch. Nur root kann die USB-Schnittstelle ffnen. Es kostet einigen Aufwand, unter dieser Restriktion mit dem Programmer zu arbeiten, denn die ganze Programmentwicklung als root zu machen kommt nicht in frage. Erst vor kurzem habe ich herausgefunden, wie das zu ndern ist.

    Der Editor gedit wird aufgerufen mit : gksudogedit/etc/udev/rules.d/80usbprog.rules

    In die Datei 80-usbprog.rules wird der folgende Text geschrieben, und zwar in einer Zeile:ATTR{idVendor}==03eb,ATTR{idProduct}==2104,GROUP=plugdev,MODE=0660#AVRISPmkII

    Dieser Text ist im wesentlichen eine Regel, die angibt, welche Gruppe von Usern mit dem AVRISP mkII arbeiten kann, wenn er in eine USB-Schnittstelle eingesteckt wird. Ob der jeweilige User Mitglied der Gruppe plugdev ist, lsst sich mit groups berprfen. Damit die Regel wirksam wird, muss udev mit sudo /etc/init.d/udev restart neu gestartet werden. Zur Sicherheit sollte man danach den USB-Stecker ziehen und wieder einstecken.

    Hat man einen anderen Programmer als den AVRISP mkII, kann man mit lsusb dessen Identcodes feststellen, aber auch die aller anderen eingesteckten USB-Gerte.

    Wahrscheinlich wegen einer Software-Aktualisierung nach der beschriebenen nderung konnte bei mir pltzlich wieder nur root mit avrdude arbeiten. Nur eine ganz radikale Lsung hat geholfen: Ich habe meine Festplatte in zwei Partionen aufgeteilt und ein zweites Ubuntu-Linux (12.04 LTS) installiert. Dort habe ich dann avr-gcc, avrdude und Code::Blocks so eingerichtet, wie es hier beschrieben ist. Dennoch, fr den Fall, dass das Problem wieder auftreten sollte, habe ich mir eine Lsung berlegt (siehe: Code::Blocks Tools / Das root / non-root Problem).

    Weil eine Distributionsaktualisierung bei mir noch nie vllig problemlos war, werde ich in Zukunft nur noch LTS (Long Time Support)-Updates machen, und zwar als Neuinstallation in eigener Partition. Nach und nach werde ich dann mit meinen Daten dahin umziehen, wodurch die alte Partition fr die nchste Installation zur Verfgung steht.

    Code::Blocks IDEDas Paket dieser integrierten Entwicklungsumgebung ist im Ubuntu-Software-Center zu finden. Nach dem ersten Start muss man sich um die Settings kmmern.

    Unter Settings/Compiler and debugger/Selected compiler erscheint der GNU CC Compiler als voreingestellt. Das ist der Compiler fr C-Programme, den jedes Linux mitbringt. Die von diesem Compiler bersetzten Programme laufen auf dem PC.

    Durch einen Klick auf das Feld rechts erscheint die Auswahlliste der anderen Compiler, mit denen Code::Blocks arbeiten kann, und da ist dann auch der GNU AVR CC Compiler dabei. Den habe ich ausgewhlt und zum default Compiler erklrt. Installiert ist er bereits. Die Registerkarten im Fenster beziehen sich auf den jeweils ausgewhlten Compiler.

    3

  • Compiler settings

    Hier wird der verwendete Mikrocontroller markiert.

    Linker settings

    Damit die Funktionen printf() und scanf() aus der Standardbibliothek stdio.h float-Typen aus- bzw. eingeben knnen, mssen bei den Linker settings (am besten per copy and paste) die folgenden Options eingetragen werden :Wl,u,vfprintflprintf_fltWl,u,vfscanflscanf_fltlm

    Man verwendet die Options nur, wenn man sie unbedingt braucht, denn ihr Ressourcenverbrauch ist hoch. Um die Options unwirksam zu machen, kenne ich bisher nur die Methode, sie aus dem Fenster zu entfernen.

    Search directories

    Hier wird der Suchpfad zu avr-gcc eingetragen, wodurch es berflssig wird, ihn in die PATH-Umgebungsvariable aufzunehmen.

    4

  • Toolchain executables

    An dieser Stelle ist das Installationsverzeichnis des Compilers einzutragen, wobei vorausgesetzt wird, dass sich die auszufhrenden Programme in dessen Unterverzeichnis bin befinden, was bei der AVR-Toolchain der Fall ist.

    Code::Blocks ToolsDie Tools, die ich konfiguriert habe, sind ausschlielich Aufrufe von /usr/bin/avrdude . Die notwendigen Parameter sind bei den folgenden Beschreibungen der Tools zu finden.

    avrdude verlangt bei seinen Parame