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.
ATMEL Studio Compiler ATMEGA 32 Plattform –
macht es einen Unterschied, ob ich diff Compiler oder Plattform verwende? –
@MohamedMoustafa Ja, es macht einen großen Unterschied. Einige Plattformen bilden überhaupt keinen ROM in den Prozessspeicherbereich ab. –