c / intermediate
Snippet
Der volatile-Qualifier für Hardware-Zugriff
Das Schlüsselwort 'volatile' teilt dem Compiler mit, dass sich der Wert einer Variable jederzeit ändern kann, ohne dass der Code eine Aktion ausführt. Dies verhindert Optimierungen wie das Caching des Wertes in einem Register.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>void wait_for_ready(volatile int* status_reg) {while (*status_reg == 0) {// Busy wait - compiler cannot optimize this loop away}printf("Hardware is ready!\n");}int main() {int fake_reg = 0;// In real scenarios, this would be a memory-mapped I/O address// wait_for_ready(&fake_reg);return 0;}
Erklärung
1
volatile int* status_reg
Gibt an, dass der Speicher, auf den status_reg zeigt, externen Änderungen unterliegt (z. B. Hardware oder Interrupts).
2
while (*status_reg == 0)
Ohne 'volatile' könnte ein Compiler annehmen, dass sich der Wert nie ändert, und dies in eine Endlosschleife verwandeln oder entfernen.