Hi, soweit ich weiß, Register bestehen aus FlipFlops und Speicher bestehen aus Flash oder SRAM, also physikalisch verschieden, aber viele Register im uC haben Adressen, warum? Viele Grüße Puff
Wie würdest du an Stelle des Mikrocontrollers zwischen deinen Registern unterscheiden wollen wenn nicht über Adressen? Ein SRAM besteht typischerweise aus Flip-Flops!
na da bin ich mal auf die Antworten gespannt. Gegenfrage: Was ist für Dich der Unterschied, ob ich nun 3 Register RegX, RegY, RegZ nenne oder 0x00, 0x01, 0x02 ?
... und wie willst Du z.B. mit einem 8-Bit BUS die Worte RegX, RegY oder RegZ codieren? Da ist nunmal eine Adresse in Form einer 8-Bit-Zahl die einzig sinnvolle Lösung! Andreas
Hi, > ... und wie willst Du z.B. mit einem 8-Bit BUS die Worte RegX, RegY > oder RegZ codieren? > Da ist nunmal eine Adresse in Form einer 8-Bit-Zahl die einzig > sinnvolle Lösung! Ganz einfach: bei diesen Register-Namen (!), die Du idR. in Assemblerbefehlen nutzt, wird die Adresszuweisung im Microcode der CPU vorgenommen. Abhängig von der CPU-Architektur haben die Register idR. jedoch direkten Zugang zum internen Datenbus. Was liegt also näher, als den Registern (die durchaus auch mal mehr als nur eine Handvoll sein können - dann gehen Dir die Namen aus!) gleich auch(!) Adressen zuzuordnen. Das hat sogar den Vorteil, ev. einen schnellen Speicher-Speicher-Transfer nutzen zu können. (z.B. DMA) Die Registernamen für bei speziellen Operationen (ACU etc.) genutzten Registern hast Du trotzdem. cu Tom
Es ist praktisch, die Register auf die gleiche Weise wie Speicher ansprechen zu können, da die Controller oft nur sehr wenig Speicher haben. Manche haben sogar überhaupt keinen. Da hätte man schon das Problem, daß man auf den Stack verzichten müßte, wenn die Register nicht wie Speicher adressierbar wären.
Mag auch für's Debugging nützlich sein, wenn alle Register per Adresse erreichbar sind ist JTAG/DebugWire einfacher zu realisieren.
"Register bestehen aus FlipFlops und Speicher bestehen aus Flash oder SRAM, also physikalisch verschieden" Wer sagt denn sowas, alles drei sind FFs, also funktional gleich. SRAM und Register sind auch physikalisch gleich. Ein Unterschied ist, Register haben die meisten Adressierungsarten, Flash die wenigsten. Und nicht alle Architekturen mappen die Register mit in den SRAM, z.B. die ARM machen das nicht. Will dort ein Interrupt die Register des Hauptprogramms auslesen, geht das nur extrem umständlich. Peter
@Peter "Wer sagt denn sowas, alles drei sind FFs, also funktional gleich" Also das versteh ich nicht, bitte korrigiere mich, wenn ich da falsch liege: FLASH besteht aus MOSFET-Transistoren mit isoliertem Gate, speichert prinzipiell 1 bit pro Transistor per Gate-Ladung SRAM: über Kreuz gekoppelte MOSFET-Transistoren, (z.B. 4 Stück für 1 bit), sog Flip-Flops Wo ist beim FLASH das Flip-Flop ???
Ein FF ist ein Gebilde, welches 2 unterschiedliche Zustände annehmen und speichern kann. Ob das nun mit Transistoren, Röhren, Relais oder Kondensatoren aufgebaut ist, spielt funktional gesehen keine Rolle. Z.B. im original 8051 wurden einige Register als DRAM (= Kondensator) aufgebaut. Deshalb durfte die minimale Taktfrequenz nicht unter 3,5MHz liegen, sonst wurden die DRAM-Zellen vergeßlich. Peter
"Ein FF ist ein Gebilde, welches 2 unterschiedliche Zustände annehmen und speichern kann." Wie nennst Du Flash-Memory, in dem pro Floating-Gate-Transistor mehrere Bits gespeichert werden? Und Ringkernspeicher besteht auch aus Flipflops? Nein, so kann man das nicht definieren.
Lass uns zurück zum Thema. Werden die Inhalte der Register auf RAM kopiert oder sind solche Register selber adressierbar? Gruss Puff
@puff Die Unterscheidung ist weniger wichtig, ob Bits in Ringkernen, Magnetblasendomänen, in optischen Beugungsgittern oder in Form von irgendwelchen Halbleiterzellen beliebigster Bauart aufbewahrt werden. Wichtig ist die Zugriffsgeschwindigkeit, die Adressierbarkeit und die Frage, ob oder wie die Daten veränderbar sind oder sein sollen. wenn du es nicht nur auf uC beziehst: Viele (alle?) CPU, uC etc. haben Sprungvektor-Tabellen an definierter Adresse im Hauptspeicher abgelegt. In die gleiche Richtung gehen Stapelzeiger (Stackpointer), welche "intern" im Prozessor benötigt werden, aber "extern" (im Hauptspeicher) zumindest als Duplikat abgelegt werden, möglicherweise auch nur die einzige Stelel im Rechnergefüge sind, wo diese Informationen gespeichert sind. die ST20 Prozessor-Serie hat ihren (internen) Register- und Portbereich auf den "normalen" Hauptspeicher-Adressbereich gemappt. (Bestimmte? Alle?) Sparc-Prozessoren haben eine "Ring-Register-Struktur", welche im Hauptspeicher abgelegt wird: Beispiel: x interne Register, y Registersets. Ein Ringpufferzeiger verweist auf den aktuellen Registersatz. Ein Lade-Automatismus verdrängt dan zum Kontext-Wechsel-Zeitpunkt die momentan im Prozessor befindlichen Register des Registersets n in den Hauptspeicher, und holt sich aus dem Hauptspeicher die Register des Registersets n+1
Adressen sind ja doch nur die Hausnummern. Ohne Bezeichnung (egal welcher Art) würde man sie ja nicht finden (benutzen) können. Dabei ist es doch gleich, welcher Art (die Speicher) sie sind. Die Art ist ja nur für die Verwendung wichtig (Ram Rom ...) Oder seh ich das falsch? Kurt
Ich glaube euer (puff, Kurt) grundsätzliches Problem besteht darin, daß ihr "einen zu großen" Zusammenhang seht zwischen Verwendungszweck einer digitalen Speicherzelle und der Architektur, wo und wie deise Spricherstelle angesprochen wird. Wie ich schon sagte: Grundsätzlich ist es erstmal schnurz, welche Technologie welche Speicherzelle benutzt ("Speicherzelle" als Platzhalter für ein Objekt zur Speicherung digitaler Informationen wo auch immer plaziert). Wichtig ist, wie schnell diese Technologie ist, und ob die Speicherzelle nur-lesbar, manchmal beschreibbar oder "immer" beschreibbar sein soll. Fakt ist, daß Dinge "sehr nah im Prozessor" schneller verarbeitet werden, und Zeugs im Hauptspeicher halt langsamer, und Zeugs auf einem "externen" Speichermodul wei eienr Festplatte halt noch langsamer (1:10:100). Und das was am häufgsten benutzt wird, ist halt mehr drin im Prozessor. Architekturen wie die vom Sparc-Prozessor erlauben einen schnellen Context- (=Prozessor-Task) -Wechsel, und deshalb hat sich deise Design-Idee halt gut bewährt bei Aufgaben, die des verlangen (z.B. bei einem Multitasking-Betriebssystem wie Unix)
Letzthin hatte im Forum mal jemand einen Weg gesucht, ein Array/String oder sowas in der Art in Register zu kopieren. Explizit mit einzelnen Moves/Loads fand er bei zig Registers etwas zu blöd und suchte einen anderen Weg. Sind die Register als Speicher adressierbar, dann wird's einfach. Seinen Ursprung mag das in jenen Rechnern früherer Zeitalter haben (bis in die 70er zu finden), die man in der Einfachheit halber mit Einzelbitschaltern urgeladen hat, und mit selbigen Schaltern und Anzeigelämpchen auch Fehler suchen durfte. An Speicherworte kam man so problemlos ran, an Registerinhalte nicht.
@ Peter -- Und nicht alle Architekturen mappen die Register mit in den SRAM, -- z.B. die ARM machen das nicht. Register mit der ARM-Architektur haben doch Adressen, zuminstest bei meinem LPC2114. z.B. PINSEL0 = 0xE002C000 Gruss Puff
Hi die Frage bezog sich auf CPU-Register. Das was beim ARM im Speicher liegt sind irgendwelche Memory-Mapped Peripheriregister. Matthias
Der interne SRAM und die Register sind wohl bei praktisch fast allen Mikrocontrollern physikalisch exakt gleich gebaut. Der einzige Unterschied sind die Adressierungsarten. Wenn Dein Opcode nur 16 Bits hat, und einen Move implementieren willst, verbrauchst Du bei 16 Registern schon 8 Bit dafür. D.h. Opcode selbst und Adressierungsart etc. müssen in den verbleibenden 8 Bits codiert werden. Der Ablaufsteuerung und der ALU ist's egal, ob sie für bestimmte Funktionen nur die unteren Adressen des SRAMs verwenden kann, die der Programmierer als Register sieht. Die Grenzen zwischen Register und RAM sind nicht mehr so scharf, wie bei den Prozessoren wie vor 20 Jahren. Man denke nur mal an die ganzen Caches bei größeren Prozessoren, und die Pipelines etc. Die Unterscheidung "Register" und "RAM" ist mehr ein konzeptionelles Kriterium, nicht so sehr ein physikalisches.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.