Forum: Mikrocontroller und Digitale Elektronik Bitzugriff vereinfachen / definieren


von Igor M. (bastel-wastel)


Lesenswert?

Hallo, ich habe gleich noch eine Frage:

Kann man mit dem GCC-Compiler die Bitzugriffe etwas vereinfachen?

Bei vielen Compilern (CodeVision, CC5x,..) kann man ja mit
1
variableX.0
direkt auf ein Bit lesend und schreibend zugreifen.
mit
1
#define MeinBit variableX.0

kann man das ganze ja schön definieren. Natürlich ist das nicht ANSI-C 
konform aber durchaus praktisch. Gibt einen Trick bei den #defines, mit 
denen man sowas bei GCC-Code "nachrüsten" kann?

Hintergrund:
Ich möchte meine Bits gerne definieren, damit ich im Quelltext nur noch 
so etwas wie:
1
if(MeinBit1)MeinBit2 = 1;

verwenden muss. Oder komme ich im Quelltext um die Operatoren
http://www.mikrocontroller.net/articles/Bitmanipulation
nicht herum? Lesend und schreibend auf ein benanntes Bit wäre schon sehr 
vorteilhaft.

von Hähh? (Gast)


Lesenswert?

Bei CodevisionAVR geht das aber nur bei Portzugriffen, man kann 
lediglich die einzelnen Bits eines I/O-Ports auf diese Weise ansprechen. 
Bei einer beliebigen Variable funktioniert das definitiv nicht. Woher 
hast du die Information, dass man bei CodevisionAVR das so machen 
könnte?

Das einzige, was bei CodevisionAVR in Richtung Bitzugriff geht, ist die 
Definition von Bitvariablen. Man kann aber maximal 8 lokale Bitvariablen 
definieren, wenn es mehr sein sollen, müssen das globale Variable sein.

Verwunderte Grüße, Hähh?

von Peter D. (peda)


Lesenswert?

Igor Metwet wrote:
> mit
>
1
> #define MeinBit variableX.0
2
>
>
> kann man das ganze ja schön definieren. Natürlich ist das nicht ANSI-C
> konform aber durchaus praktisch. Gibt einen Trick bei den #defines, mit
> denen man sowas bei GCC-Code "nachrüsten" kann?

Ja, den gibt es, hier ein Beispiel:

Beitrag "Re: LCD nicht nur für einen Port in C"


Peter

von Igor M. (bastel-wastel)


Lesenswert?

@Hähh?
Sorry, beim CC5X funktioniert der Variablenzugriff so. Beim CV habe ich 
auch in Codebeispielen dien Punkt-Zugriff gesehen. Wahrscheinlich war es 
aber ein PORT-Zugriff und ich habe das auf Variablen geschlossen.

@Peter:
Danke. Das funktioniert wunderbar !!
Genau das habe ich gesucht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.