Cortex M4 MK20DX256VMC7

Gast #4200217
Lesenswert?
• ▲
▼
Kann mir jemand erklären, warum zwei "uint32__t" hintereinadner 
geschrieben werden?!?
z.B. so:

PORTA_PCR19 &= (uint32_t)~(uint32_t)((PORT_PCR_ISF_MASK | 
PORT_PCR_MUX(0x07)));

Ist das nicht doppelt?!? Oder bezieht sich das erste uint32_t auf 
PORTA_PCR19 und das ~uint32_t auf den Ausdruck ((PORT_PCR_ISF_MASK | 
PORT_PCR_MUX(0x07)))?!?

Oder wie muss ich das verstehen?

P.S.: Das ist ein Auszug aus einem Beispiel von einem MK20DX256VMC7.
Gast #4200386
Lesenswert?
• ▲
▼
Chris schrieb:
> Das ist ein Auszug aus einem Beispiel von einem MK20DX256VMC7.

MK20DX256VMC7.was bitte?

Der tatsächliche Inhalt der betr. Zeile dürfte etwa so aussehen:
PORTA_PCR19 &= ~(0xirgendwas | (1<<7));

Dieses PORT..MASK und PORT..MUX Geraffel finde ich einfach nur sch...e

Mein Rat: Schreib dir deine Port-Setup-Routinen lieber selbst - nach dem 
Lesen der diversen Manuals. Ja, ich weiß, bei den ExMotorolas ist alles 
Geschriebene recht schwer verdaulich. Ich kriege auch jedesmal Zustände 
beim Suchen und MichHalbtotBlättern.

W.S.
Gast #4212250
Lesenswert?
• ▲
▼
Danke Dir. Mitlerweile sind wir drauf gekommen. Ziemlich trivial und 
eigentlich logisch:

PORTA_PCR19 &= (uint32_t)~(uint32_t)((PORT_PCR_ISF_MASK |
PORT_PCR_MUX(0x07)));

((PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x07))) ist halt irgendeine Maske. 
Die aber nicht 32 bit sein muss.
Deswegen wird sie in eine 32 bit gewandelt und jedes bit "gedreht" 
(~(uint32_t)).
Da diese Zahl aber auch negativ werden kann, wird sie in eine positive 
Zahl gewandelt ((uint32_t)). Deswegen die beiden (uint32_t)~(uint32_t). 
Die hatten mich verwirrt.

Trotzdem Danke für die Hilfe.
Gast #4214523
Lesenswert?
• ▲
▼
Chris schrieb:
> ((PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x07))) ist halt irgendeine Maske.
> Die aber nicht 32 bit sein muss.
> Deswegen wird sie in eine 32 bit gewandelt und jedes bit "gedreht"
> (~(uint32_t)).
> Da diese Zahl aber auch negativ werden kann, wird sie in eine positive
> Zahl gewandelt ((uint32_t)). Deswegen die beiden (uint32_t)~(uint32_t).
> Die hatten mich verwirrt.

zu Recht.
Ich möchte mal denjenigen sehen, der eine dediziert unsigned Zahl 
negativ hinbekommt...

Aber zum Verständnis: mit einem Typecast ist keinelei Umwandlung 
verbunden, sondern lediglich die Auffassung vom Operanden festgenagelt. 
Das ist ein gravierender Unterschied. Deine Worte lesend bin ich mir 
nicht sicher, ob du das richtig verstanden hast.

Nochmal: Laß von all diesen vigilantischen 
Präprozessor-Steptanz-Einlagen lieber die Finger und schreib dir das 
benötigte Zeugs selber - und zwar so, daß du es auf den 1. Blick 
verstehst. Auf Dauer lebst du damit besser, weil es einfacher und damit 
überschaubarer ist.

W.S.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.