Cortex M4 MK20DX256VMC7

Gast #4200217
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
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
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
Hallo, ohhh diese Definitionen ist wirklich manchmal sonstwo hergeholt.

Gruß Sascha

PS.Die Dokumentation in den Manuals ist wirklich Kapitelübergreifend 
verstreut.
Gast
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.