Byte im Register schreiben (in C)?

Hallo,

brauche wieder eure Unterstützung!

wie kann ich in einem Register Daten oder genau ein Byte schreiben, wenn ich nur seine Addresse habe?
Ich habe die Adresse von meinem Register definiert mit #define PA1OUT 0x10…86, 0x10…86 ist die Adresse von meinem Byte-Register und möchte zB. 0x80 an dieser Adresse schreiben, dass mein Byte-Register so aussieht 1000 0000.
Gibt’s vielleicht eine Vordefinierte Funktion in C Bibliothek?

vielen Dank im Voraus.
NR

Hallo NR,

brauche wieder eure Unterstützung!

wie kann ich in einem Register Daten oder genau ein Byte
schreiben, wenn ich nur seine Addresse habe?
Ich habe die Adresse von meinem Register definiert mit #define
PA1OUT 0x10…86, 0x10…86 ist die Adresse von meinem
Byte-Register und möchte zB. 0x80 an dieser Adresse schreiben,
dass mein Byte-Register so aussieht 1000 0000.

Zuerst solltest du einmal definieren, was du unter „Register“ verstehst. Eigentlich ist ein Register in der CPU, diese kannst du nur in Assembler gezieht beschreiben. Einige Compiler haben dazu spezielle Macros, diese sind aber nicht genormz und somit kann man die ohne zu wissen welchen Compiler du hast, auch nichts sagen.
Oder handelt es sich um ein Control-register eines Peripherie-Bausteins ??
Dann sollte man wissen um welche CPU es sich handelt und ob dieser Peripherie-Baustein im I/O-Bereich liegt oder memory mapped ist.

Achja, so ganz nebenbei spielt das Betriebssystem auch noch eine Rolle! Damit ein Multitask-Betriebssystem nicht durcheinander kommt, dürfen Anwendungsprogramme nicht einfach an der Peripherie rumspielen !

MfG Peter(TOO)

Übliche verfahren sind …
Hallo NR,

wenn Du, wie Peter zurecht anmerkt, in dieses Register auch schreiben darfst, und dieses Register im „normalen“ Speicherbereich liegt, dann geht (fast) immer

(*( (unsigned char *) PA1OUT )) = 0x80;

die hinter PA1OUT definierte Addresse wird als pointer auf unsigned char betrachtet (gecastet), und von diesm Pointer wird der inhalt „dereferenziert“ und auf 0x80 gesetzt.

andere compiler für embedded systeme haben die möglichkeit eine Adresse bei einer variablen-definition anzugeben.

unsigned char my_register @ PA1OUT;

im code kanns Du dann
my_register = 0x80;
verwenden.

andere compiler benötigen irgendwo bei der deklaration ein schlüsselwort wie z.B. io

io unsigned char my_register @ PA1OUT;

unabhängig von vielen möglichen Lösungen, die richtige steht in deinem Compilerhandbuch. Und entgegen vielen unkenrufen sind bei echten Compilern auch die Handbücher gut, wenigstens was die gemeinsamkeiten mit ANSI-C, aber vor allem die Abweichungen und implementierungsabhängige Details betrifft.

Gruß
achim

1 „Gefällt mir“

Anmerkung
Hallo achim,

Wenn du dieses Posting direkt unter die Frage geschrieben hättest, hätte NR eine Nchricht per E-Mail bekommen. So wurde nur ich benachrichtig und für mich enthalten deine Antworten keine Neuigkeiten.

MfG Peter(TOO)