Files
2026-06-16 20:13:26 +02:00

57 lines
4.0 KiB
Markdown

# 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 `<avr/fuse.h>`) auf den Chip.
*Hinweis: Da wir das moderne ELF-Format nutzen, entfällt das manuelle Generieren von alten `.hex`-Dateien vollständig.*