Registerinhalt überschreiben!!
-
Mahlzeit zusammen,
ich habe mal wieder eine dumme Frage. Ist es möglich, einen Registerinhalt komplett mit einem neuen Wert zu überschreiben, ohne den alten Wert vorher gelöscht zu haben?
Danke im voraus
MichBau
-
warum sollte das nicht gehen?
mov eax, 5
aber was hat das mit C zu tun
-
Na das ganze natürlich als C-code
sowas wie:
P0_OUT.reg |= 0x1234 (Port Output Register mit Wert 0x1234 laden)
geht ja wohl eher nicht?!
-
Wenn du einen speziellen Compiler für µCs hast, dann würde ich die Dokumentation des Compiler/µC lesen, wie deine Register für deine Ports heissen bzw. wie du sie ansprechen kannst.
-
Tschuldigung wenns nicht ganz klar rüber gekommen ist.
Die Bezeichnung der Ports bei meinem Controller (TC1130) und der Zugriff ist schon klar, mein Problem liegt eher im C-Sprachumfang.
|= Bitweises ODER
&= Bitweises UND
usw.
hilft mir aber alles nicht, da ich ja damit nicht den alten Wert überschreibe mit meinem neuen, sondern irgendein Inhalt dann im Register stehtIch suche also nach einem Weg der mir erspart, dass ich vor dem neuladen das Register erst löschen muss.Geht das ?????
-
Kennst Du "Zuweisung"?
int a = 12;
Wüsste nicht warum das mit einem Register, der |= und &= versteht, nicht klappen sollte
-
*rofl*
-
Okai war noch nicht deutlich genug!!!!
Also ich habe ein 16 bit breites Register, wovon ich in einem vorgegebenen Zeitraster die ersten 12 bit immer wieder mit einem neuen Wert beschreiben möchte.Ich glaube nicht das eine Zuweisung mir da sonderlich weiterhilft!!!!!
-
Wenn du nur einzelne Bits deines Registers manipulieren willst, kommst du um Bit-Manipulationen nicht herum:
reg=(reg&0xF000)|wert;
-
Ja okai das hört sich doch nach einer Antwort an.
Dankeschön!!!
-
ich kenn mich mit dem TC1130 nicht aus, aber bei vielen io-bausteinen ist es so, daß die register doppelt belegt sind. beim lesen bekommst du ein anderes register als beim schreiben. häufig sind die register auch ungepuffert, dh du kannst den vorher reingeschriebenen wert nicht wieder auslesen. manche register können auch sog strobe-register sein. da bewirkt unter umständen schon das lesen irgendeine aktion.
ein c-befehl wie reg=(reg&0xFFF0)|wert. führt erst eine leseaktion und anschließend eine schreibaktion auf das register durch. es kann gut sein, daß das etwas völlig anderes bewirkt, als du erwartest. coprozessor-register verhalten sich meistens nicht wie normale speicherzellen.