# Emacs AVR IDE Template Dieses Repository ist ein vollständiges Template, um **Emacs** als leichtgewichtige, aber extrem mächtige IDE für die Entwicklung von **AVR Mikrocontrollern** (speziell moderne AVR Dx/Ex Serien, aber auch voll abwärtskompatibel zu älteren Serien) zu nutzen. Es verwendet **CMake** als Build-System und verlässt sich auf die Kombination von `avr-gcc`, `avrdude` (ELF-Support) und `clangd` (Language Server), um Code-Vervollständigung, schnelles Kompilieren und direktes Flashen aus dem Editor heraus zu ermöglichen. ## Voraussetzungen auf Betriebssystemebene * `avr-gcc` (AVR Toolchain Compiler) * `avrdude` (Version 7.0 oder höher zwingend empfohlen für nativen ELF-Support) * `clangd` (Für Code-Vervollständigung, Warnungen und Fehleranzeige in Emacs) * `cmake` (Build-System) * `ripgrep` (Wird für die extrem schnelle Suche in Emacs verwendet) * Device Packs für moderne AVRs: [Microchip Packs Repository](http://packs.download.microchip.com/) ## Emacs Packages Damit das IDE-Feeling perfekt wird, greift dieses Template auf einige spezifische Emacs-Packages zurück, die sich bewährt haben: * **Projectile**: Zur Projektverwaltung (findet den Root-Ordner automatisch anhand der `CMakeLists.txt`). * **Eglot**: Als integrierter C/C++ Language Server Client (kommuniziert im Hintergrund mit `clangd`). * **Corfu**: Für das moderne Autovervollständigungs-Popup direkt am Cursor. * **Vertico, Orderless & Consult**: Für eine smarte, fehlertolerante Suche über das gesamte Projekt (inklusive Ripgrep-Anbindung). * **Doom Themes**: Für einen augenschonenden, modernen Dark Mode. ## Installation der Emacs-Konfiguration Wenn du Emacs von Grund auf neu einrichtest, kannst du die beiliegende Beispieldatei verwenden: 1. Kopiere die Datei `init-example.el` in dein Emacs-Konfigurationsverzeichnis (meist `~/.emacs.d/` oder `~/.config/emacs/`). 2. Benenne sie in `init.el` um. ```bash cp init-example.el ~/.emacs.d/init.el ``` 3. Starte Emacs neu. Beim ersten Start werden alle fehlenden Pakete automatisch von MELPA heruntergeladen und installiert. ## Mikrocontroller (MCU) wechseln Dieses Projekt ist standardmäßig für den **AVR128DB28** konfiguriert. Wenn du einen anderen Chip verwenden möchtest: 1. Öffne die Datei `CMakeLists.txt`. 2. Ändere den Wert der Variable `MCU` (z.B. auf `atmega328p` oder `avr128da28`). 3. Ändere bei Bedarf das `DEVICE_PACK_DIR`. (Für moderne AVR Dx/EA Serien wird das Device Pack von Microchip benötigt. Für ältere Modelle wie den ATmega kannst du diesen Pfad oft leer lassen). 4. Drücke **F5** in Emacs, um das Projekt frisch zu konfigurieren und zu bauen. *(CMake erzeugt die Datei `compile_commands.json` dabei neu, wodurch `clangd` sofort die Register und Pins des neuen Chips in der Autovervollständigung kennt!)* ## Entwicklungsworkflow & Shortcuts Sobald du eine `.c` oder `.h` Datei im Projekt öffnest, erkennt Projectile das Projekt automatisch und Eglot startet im Hintergrund den Language Server. Die wichtigsten Tastenkürzel für die **Projektverwaltung** (via Projectile & Consult): * `C-c p f`: Datei im Projekt finden (Fuzzy Search). * `C-r`: Projektweit nach Text suchen (Consult Ripgrep - extrem schnell!). * `C-c p p`: Zwischen verschiedenen, lokal gespeicherten Projekten wechseln. Die Tastenkürzel zum **Bauen und Flashen** (eingestellt über F-Tasten in der `init.el`): * **`F5`**: **Clean Build**. Löscht den Cache radikal und baut das Projekt komplett neu (Kompiliert inkl. Linker Garbage Collection für minimale Größe). * **`F6`**: **Flash Code**. Flasht nur den Programmcode (Flash-Speicher) via Avrdude. *(Standardbefehl während der Entwicklung)* * **`Strg + F6`**: **Flash Code & EEPROM**. Flasht den Code und die EEPROM-Daten. * **`F7`**: **Read Fuses**. Liest die Fuses vom Mikrocontroller und zeigt sie im Emacs Compile-Fenster an. * **`Strg + F7`**: **Flash Fuses**. Schreibt die direkt in der C-Software definierten Fuses (via ``) auf den Chip. *Hinweis: Da wir das moderne ELF-Format nutzen, entfällt das manuelle Generieren von alten `.hex`-Dateien vollständig.*