C++ AVR

= Programmieren von AVR mit C/C++ =

Benötigte Hardware

 * 1) Mikrocontroller: -- to be done --
 * 2) Programmieradapter: -- to be done --

Benötigte Softwarepakete

 * 1) Editor: Hier kann jede(r) seinen/ihren Lieblingseditor verwenden. Wichtig ist nur, daß damit der Text des Quellcodes geschrieben und gespeichert werden kann. Es kann aber auch eine mehr oder weniger ausgewachsene Entwicklungsumgebung (IDE) verwendet werden, die z.T. noch Debugger u.v.m. enthält. Für erste Gehversuche ist das aber m.E. overkill und führt eher zu Verwirrung, da man sich zunächst mit der Bedienung der IDE auseinander setzen muß. Einen Kompromiß stellt evtl. ein Editor dar, der nützliche Zusatzfeatures wie z.B. Syntaxhighlighting enthält, wie z.B. Geany.
 * 2) gcc-avr: Dies ist der (portable) GNU C Compiler, der mehrere Sprachen unterstützt. Dieses Paket bietet Unterstützung für C.
 * 3) avr-libc: Standardbibliothek, welche zur Entwicklung von C-Programmen für den Atmel AVR Microcontroller benutzt wird. Dieses Paket enthält die statischen Bibliotheken sowie die nötigen Headerdateien.
 * 4) make: GNU Make ist ein Dienstprogramm, das die Erzeugung von ausführbaren und anderen Dateien aus Quelltexten steuert. Es bestimmt selbstständig, welche Teile eines großen Programms (erneut) erstellt werden müssen und führt die dafür erforderlichen Befehle aus. Make ist nicht auf ausführbare Programme beschränkt. Es lässt sich für jede Aufgabenstellung, bei der eine Reihe von Dateien aus anderen Dateien aufgrund von Abhängigkeiten und Verarbeitungsregeln erzeugt werden müssen, gebrauchen. In der Tat ist es ein Allzweckwerkzeug für die Auflösung von Abhängigkeiten. Das Programm benötigt für einen makefile, der auch so heißen muß. Diese Datei muß im Suchpfad vorhanden sein, am einfachsten legt man sie im Arbeitsverzeichnis des aktuellen AVR-Projekts an. Es gibt fertige makefiles, die als Vorlage dienen können und nur wenig angepasst zu werden brauchen.
 * 5) avrdude und avrdude-doc: AVRDUDE ist ein Open-Source-Werkzeug für Download, Upload und Manipulation von ROM- und EEPROM-Inhalt der AVR-Mikrocontroller mit Hilfe der ISP-Technik. ISP steht für In-System-Programmierung. Dieses Programmiertool wird durch make aufgerufen und überträgt den kompilierten Maschinencode in den Mikrocontroller. Dazu muß der natürlich über einen Programmieradapter mit dem Rechner verbunden sein.

Einige andere Pakete könnten später noch nützlich sein, werden aber am Anfang nicht unbedingt benötigt:
 * avrp: Avrp ist ein FLASH/EEPROM-Programmierer für Atmels 8-bit-Mikrocontroller-Familie AVR. Er kann außerdem die Mikrocontroller der Atmel-AT89-Reihe programmieren. Er unterstützt mindestens vier verschiedene Programmiergeräte einschließlich Atmels eigenem AVR-Entwicklungs-Board und In-Circuit-Programmierung.
 * binutils-avr: The programs in this package are used to manipulate binary and object files that may have been created for Atmel's AVR architecture. This package is primarily for AVR developers and cross-compilers and is not needed by normal users or developers.
 * '''gdb-avr: source-level debugger
 * simulavr: Simulator
 * avr-evtd: ARV-Watchdog-Daemon für Linkstation/Kurobox

Progamm erstellen
Mit dem Editor ein C-Programm schreiben, als Test kann das flash1.c im Listing weiter unten dienen, das eine LED zum Blinken bringt. Die Datei muß die Endung .c haben.

Beispielcode flash1.c (freundlicherweise von penma zur Verfügung gestellt)
 * 1) include 
 * 2) include 

int main (void) { uint32_t cnt = 0;

DDRD = (1 << PD5) | (1 << PD6);

while (1) { cnt++; cnt &= (1 << 15) - 1;

if (cnt & (1 << 14)) { PORTD = 1 << PD5; } else { PORTD = 0 << PD5; }	}

return 0; }

Compilieren
Das erfolgt durch Aufruf des Programms make. Es benötigt den makefile, der im Pfad zu finden sein muß, am besten im Arbeitsverzeichnis. "make TARGET=flash1" Mit TARGET wird der Name des Programms angegeben

Übertragen des Hexfiles in den Controller
Dies geschieht auch durch Aufruf des makefile. Damit wird avrdude aufgerufen, der dann die Hardware des Programmieradapter ansteuert und darüber die Daten in den AVR überträgt. make program TARGET=flash1