Der direkte Registerzugriff auf den GPIO-Block des BCM2711 (Raspberry Pi 4). Die Unit bildet den Peripheriebereich einmal per mmap in den Prozess ein; danach kostet jedes Setzen oder Lesen eines Pins keinen Syscall mehr, sondern nur einen Speicherzugriff. Das ist der Weg für Bit-Bang-Protokolle und Software-PWM, wo jede Mikrosekunde zählt.
Der Kontext (GpioCtxAlloc) ist ein 24-Byte-Block mit drei Feldern: Basisadresse der Abbildung, ein Flag ob sie steht, und ob der Chip die neue Pull-Up/Down-Registerform kennt. Er gehört mit GpioClose geschlossen und mit GpioCtxFree freigegeben — in dieser Reihenfolge.
Rechte: GpioInit öffnet /dev/gpiomem bzw. /dev/mem und braucht entsprechende Rechte. Wer ohne sie startet, bekommt einen Fehler zurück — kein Absturz.
std.hardware.gpio — Übersicht · GPIO-Guide · Standard Library
| Signatur |
|---|
GpioCtxAlloc(): int64 |
GpioCtxFree(ctx: int64) |
GpioGetMem(ctx: int64): int64 |
GpioIsMapped(ctx: int64): int64 |
GpioHasNewPull(ctx: int64): int64 |
GpioInit(ctx: int64): int64 |
GpioClose(ctx: int64) |
GpioSetPinMode(ctx: int64, pin: int64, mode: int64): int64 |
GpioWritePin(ctx: int64, pin: int64, state: int64): int64 |
GpioReadPin(ctx: int64, pin: int64): int64 |
GpioSetPullMode(ctx: int64, pin: int64, mode: int64): int64 |
| Konstante | Wert | Bedeutung |
|---|---|---|
GPIO_CTX_SIZE | 24 | – |
GPIO_PIN_INPUT | 0 | RPI4_MODE_INPUT |
GPIO_PIN_OUTPUT | 1 | RPI4_MODE_OUTPUT |
GPIO_PIN_LOW | 0 | – |
GPIO_PIN_HIGH | 1 | – |
GPIO_PULL_NONE | 0 | – |
GPIO_PULL_DOWN | 1 | – |
GPIO_PULL_UP | 2 | – |
gpio_mmio liefert die rohe Ebene. Darüber liegen std.hardware.gpio_pin (typsichere Ein-/Ausgabe-Pins) und std.hardware.gpio_ext (Alt-Modi, Edge-Detection, Software-PWM). Wer mehrere Pins atomar schalten oder auf Flanken warten will, ist mit std.hardware.gpio_ioctl besser bedient.
Quelle: std/hardware/gpio_mmio.lyx · geprüft mit lyxc 1.0.21A · Stand 2026-08-12