Forum: Compiler & IDEs Cast für Register Adresse


von eagle user (Gast)


Lesenswert?

Servus miteinander,
1
DMA1->S[1].PAR = (uint32_t)(&TIM3->CCMR2);

Auf deutsch: ich möchte die Adresse des CCMR2 in das Peripheral Address 
Register des DMA-Controllers laden. Schreibt man das so? Oder ganz 
anders? Kann man nicht wenigstens die Klammern um &TIM3->CCMR2 
weglassen?

Schon mal danke für sachdienliche Hinweise.

von Dr. Sommer (Gast)


Lesenswert?

DMA1->S[1].PAR
sicher dass das richtig ist? Das heißt doch sonst immer DMAx_Streamy

eagle user schrieb:
> Schreibt man das so?
Ja.

eagle user schrieb:
> Kann man nicht wenigstens die Klammern um &TIM3->CCMR2
> weglassen?
Kann man, aber übersichtlicher wird's dadurch nicht. Erklärung:
Laut der Operator Precedence Tabelle:
http://en.cppreference.com/w/cpp/language/operator_precedence
bindet das -> stärker als das &, dadurch wird der TIM3->CCMR2 Ausdruck 
nicht auseinandergenommen.

Ansonsten: Probiers doch einfach aus...

von eagle user (Gast)


Lesenswert?

Dr. Sommer schrieb:

> DMA1->S[1].PAR
> sicher dass das richtig ist? Das heißt doch sonst immer DMAx_Streamy

Naja, es funktioniert ;) Es gibt ja 8 gleiche Streams mit je 6 
Registern, da dachte ich mir, genau dafür sind Arrays erfunden worden.

> eagle user schrieb:
>> Schreibt man das so?
> Ja.
>> Kann man nicht wenigstens die Klammern um &TIM3->CCMR2
>> weglassen?
> Kann man, aber übersichtlicher wird's dadurch nicht.

Danke, das ist der entscheidende Punkt.

> Ansonsten: Probiers doch einfach aus...

Das kann ja jeder, die Maschine versteht es dann schon. Aber es soll ja 
auch für Menschen lesbar sein ;)

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.