Zuletzt aktualisiert: 09.04.2023
Aquaristik
Modellbau
Software
3D-Druck
Garten
Radreisen
Kontakt
Impressum

Hilfsfunktionen

Jedem Anfänger vergeht schnell die Lust am Programmieren von Mikrocontrollern, wenn er sieht, dass manche Leute selbst nach jahrelanger Erfahrung immernoch mit einzelnen Bits und Bytes um sich werfen.
Dank Makros lösen sich diese Erfahrungswerte in Wohlgefallen auf. Makros dienen dazu, dass der Compiler, noch bevor er den Programmcode in ausführbaren Code umsetzt, eine Art Textverarbeitung durchführt.
Er ersetzt dabei die im Code benutzten Makros durch die Makrodefinitionen, dieser Vorgang nennt sich Präprozessor:

#define abs(x) ((x < 0) ? (-x) : (x))

// im Programmcode:
f = abs(d-5);

// wird ersetzt zu:
f = (((d-5) < 0) ? (-(d-5)) : ((d-5)));

Erst jetzt wendet der Compiler ggf. Optimierungen an. Zwar wird der Code unter Umständen länger, aber er wird auch wesentlich lesbarer.

Im Folgenden nun ein paar Definitionen, die sehr brauchbar sind.
#include <avr/io.h>

#define setBit(target,bitnumber)    (target|=(1<<bitnumber))
#define delBit(target,bitnumber)    (target&=(~(1<<bitnumber)))

#define isSet(port, pin)            ((port&(1 << pin)) == (1 << pin))
#define isNotSet(port, pin)         ((port&(1 << pin)) == 0)

#define configureAsOutput(target,bitnumber)   (setBit(target,bitnumber))
#define configureAsInput(target,bitnumber)    (delBit(target,bitnumber))

#define switchHigh(target,bitnumber)   (setBit(target,bitnumber))
#define switchLow(target,bitnumber)    (delBit(target,bitnumber))

#define switchLedOn(target,bitnumber)    (delBit(target,bitnumber))
#define switchLedOff(target,bitnumber)   (setBit(target,bitnumber))

#define isSwitchPressed(target,bitnumber)    (isNotSet(target,bitnumber))
#define isSwitchNotPressed(target,bitnumber)   (isSet(target,bitnumber))

#define isLow(port, pin)            (isSet(port,pin))
#define isHigh(port, pin)           (isNotSet(port,pin))

#define abs(x) ((x < 0) ? (-x) : (x))


Download
Copyright © 2023 Evolutec Alle Rechte vorbehalten.