Cyblord -. schrieb:
> Stefan ⛄ F. schrieb:
>>
1 | >> #define START_BUTTON_PRESSED (PINB & (1<<PINB2))
|
2 | >>
|
3 | >> if (START_BUTTON_PRESSED) ...
|
4 | >>
|
>
> Es gibt echt noch Leute die denken, derartige Makro-Magic wäre sauberer
> Code.
Es gibt echt noch Leute, die Makros nicht verstehen und darum ablehnen.
> Braucht man eine Funktion, schreibt man einfach eine Funktion. Kein
> MAKRO.
Tja. Nur braucht man halt dafür gar keine Funktion. Vor ein paar
Jahren noch hätte man mit einer Funktion an dieser Stelle die
Performance mal locker um Faktor 10 verschlechtert. Denn das Makro
(genauso wie der Funktionsrumpf) wird auf einem AVR zu einem einzelnen
Maschinenbefehl. Prolog und Epilog, den der Compiler für die Funktion
generiert, sind deutlich größer. Und CALL/RET sind auch nicht kostenlos.
Erst seit C-Compiler solchen Funktionen inlinen können, ist die Variante
mit Funktion genauso schnell. Wobei man sich da immer noch hypsch in den
Fuß schießen kann. Wenn man diese Funktionen nämlich in ein extra .c
File auslagert (HAL und Abstraktion, wissen schon) dann wird der
Compiler die nicht mehr inlinen. Außer wenn man LTO eingeschaltet hat.