57 lines
4.0 KiB
Markdown
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.*
|