2016-12-15 2 views
0

Angenommen, IO-Teil schreibt, ist Speicher 0x32 und die Richtlinie auf Adresse abgebildet definiertC-Sprache-Makro, die die Port

#define portx 0x32 

Wie Sprache C Makro, das schreibt der Port durch Speichern eines Wertes zum entsprechenden Register konstruieren?

+0

Willkommen bei stackoverflow.com. Bitte nehmen Sie sich etwas Zeit, [die Hilfeseiten] (http://stackoverflow.com/help) zu lesen, besonders die Abschnitte mit dem Namen ["Welche Themen kann ich hier fragen?"] (Http://stackoverflow.com/help/) on-topic) und ["Welche Art von Fragen sollte ich vermeiden zu fragen?"] (http://stackoverflow.com/help/dont-ask). Auch bitte [nehmen Sie die Tour] (http://stackoverflow.com/tour) und [lesen Sie, wie man gute Fragen stellt] (http://stackoverflow.com/help/how-to-ask). Zuletzt erfahren Sie, wie Sie ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) erstellen können. –

+0

Siehe [this] (http://stackoverflow.com/a/31266754/584518) für ein weiteres Duplikat. – Lundin

Antwort

0

Wenn Sie einen Makro verwenden, muss dann in der Regel würde es so etwas wie diese:

#define WRITE_PORT(port, val) *((volatile uint8_t *)(port)) = (val) 

und Sie könnten dann rufen Sie diese wie z.B.

WRITE_PORT(portx, 0xff); // write 0xff to portx 

Beachten Sie, dass dies einen 8-Bit-Anschluss voraussetzt.

Beachten Sie auch die Verwendung von volatile, um zu verhindern, dass E/A-Lese-/Schreibvorgänge vom Compiler weg optimiert werden.

+0

was ist val? ist * ((flüchtig uint8_t *) (Port)) die Adresse der Port-Mapped-IO? – Sara

+0

'val' ist der zweite Makroparameter, d. H. Der Wert, der in den Port geschrieben wird. '* ((volatile uint8_t *) (port))' wandelt einfach die numerische Portadresse in einen Zeiger um und dekomprimiert dann diesen Zeiger, um in die Adresse zu schreiben, auf die er zeigt. –

+0

ok, danke! Wenn also der IO-Teil der Adresse 0x32 zugeordnet ist und die Direktive #define portx 0x32 definiert, wäre das Makro #define WRITE_PORT (port, val) – Sara

Verwandte Themen