2017-10-26 6 views
0

Es gibt verschiedene Speichersegmente wie .bss, .text, .data .rodata, ....RAM & ROM Speichersegmente

Ich habe zu wissen, scheitern, wer von ihnen im RAM lokalisiert und die von Sie finden sie im FLASH-Speicher, viele Quellen haben sie in beiden Abschnitten von (RAM & ROM) Speichern erwähnt.

Bitte geben Sie eine faire Erklärung der Speichersegmente von RAM und Flash.

ATMEL Studio Compiler
ATMEGA 32 Plattform

+0

ATMEL Studio Compiler ATMEGA 32 Plattform –

+0

macht es einen Unterschied, ob ich diff Compiler oder Plattform verwende? –

+3

@MohamedMoustafa Ja, es macht einen großen Unterschied. Einige Plattformen bilden überhaupt keinen ROM in den Prozessspeicherbereich ab. –

Antwort

1

Sie befinden sich überall dort, wo Ihr Projekt Linker-Skript sie definiert befinden.

Einige Ziele suchen und führen Code im ROM aus, während andere beim Start Code aus ROM in RAM kopieren und aus dem RAM ausführen können - normalerweise aus Leistungsgründen auf schnelleren Prozessoren. So können .text und .rodata im R/W- oder R/O-Speicher liegen. Jedoch können .bss und .data per Definition nicht im R/O-Speicher liegen.

+0

Vielen Dank Ihre Antwort hat mir geholfen, dieses Problem zu verstehen. Gibt es Referenzen oder Dokumente, um dieses Thema tiefer zu verstehen? –

+2

@MohamedMoustafa: Die Dokumentation für Ihren Linker/Compiler und das Referenzhandbuch/Datenblatt für Ihre Zielplattform. – Clifford

1

Hoffentlich verstehen Sie die typischen Verwendungen dieser Abschnittsnamen. .text ist Code, .rodata liest nur Daten, .data sind Nicht-Null-Lese/Schreib-Daten (zum Beispiel globale Variablen, die zur Kompilierungszeit initialisiert wurden), .bss lesen/schreiben Daten, die als Null angenommen werden, nicht initialisiert. (globale Variablen, die nicht initialisiert wurden).

also .text und .rodata sind nur lesbar, damit sie in Flash oder Ram stehen und dort verwendet werden können. .data und .bss sind lesend/schreibend, also müssen sie in RAM verwendet werden, aber um diese Informationen in den ram zu bringen, muss sie an einem nicht-flüchtigen Ort sein, wenn das Gerät ausgeschaltet ist, und dann zu ram kopiert werden. In einem Mikrocontroller wird die .data-Information also in Flash leben und der Bootstrap-Code muss diese Daten in seine Heimatdatei im RAM kopieren, wo der Code sie erwartet. Für .bss brauchen Sie nicht alle diese Nullen, Sie brauchen nur die Startadresse und die Anzahl der Bytes und der Bootstrap kann diesen Speicher auf Null setzen.

so können alle in beiden leben. aber der typische Anwendungsfall ist, dass die nur gelesenen in Flash verwendet werden, und das Lesen/Schreiben in RAM verwendet.

Verwandte Themen