Die . Hex-Datei, die wir brennen, geht in Flash-Speicher oder RAM oder EEPROM von Atmega8?

Der Flash-Speicher von atmega8 ist 8 KB groß.

Ist dies die maximale Größe für die .hex-Datei oder der maximale Speicher, den ich Variablen in meinem Code zuweisen kann?

Wenn keiner der oben genannten Punkte zutrifft, was ist dann die Speicherzuweisungsstruktur von Atmega8? In welchen Speicher geht die .hex-Datei?

Antworten (3)

Bei der Standardverwendung geht Ihr Code in den 8 KByte Flash-Speicher und Variablen in den 1 KByte SRAM. Beachten Sie, dass eine Hex-Datei, da sie ein einzelnes Byte als Paar hexadezimaler Zeichen darstellt und einige andere Informationen enthält, mehr als doppelt so groß ist wie der tatsächlich geladene Code, sodass eine Hex-Datei mit etwas mehr als 16 KB geladen werden sollte.

Der zuverlässigste Ort, um herauszufinden, wie viel Flash und SRAM Ihr Code verwendet, ist der Compiler. Wenn Sie Atmel Studio 6 im Build-Ausgabebereich verwenden, sollten Sie beim Scrollen nach oben Folgendes sehen:

Programmspeichernutzung: 540 Byte 0,8 % voll

Datenspeichernutzung: 0 Byte 0,0 % voll

Die Programmspeichernutzung zeigt also, wie viel Flash verwendet wird, und die Datenspeichernutzung zeigt, wie viel SRAM verwendet wird.

Und EEPROM? Kann es in das Hex eingeschlossen werden?
@CamilStaps, sofern es nicht kürzlich geändert wurde, speichern die meisten Atmel-Compiler das in einer separaten Datei.
Sehr, sehr vielen Dank an Sie @peterj. Eigentlich ist dies die Struktur, die ich wissen möchte. Übrigens, ich codiere in cvAVR.plz, sagen Sie mir, wo ich das darin überprüfen kann? Was passiert auch, wenn meine Codegröße den Flash-Speicher überschreitet?
@shafeeq, es ist lange her, dass ich cvAVR verwendet habe, aber ich denke, Sie müssen herausfinden, wo Sie entweder die Listen- oder Kartendateioptionen unter dem Projekt aktivieren können, und dann erhalten Sie entweder eine .map- oder eine .lst-Datei enthält es. Wenn es aufgebraucht ist, erhalten Sie einen Compiler-Fehler, es wird nichts beschädigt, Sie können es nur nicht laden.
@PeterJ wird also nichts passieren, da nur dieser Teil des Codes geladen wird, bis der Speicher gefüllt ist, und dann der verbleibende Code ausgelassen wird und wenn wir MCU ausführen, verhält es sich abnormal.
@shafeeq, vielleicht verfolgt cvAVR die Größe des Zielchips nicht wie die Atmel-Tools. In diesem Fall wäre das, was Sie gesagt haben, richtig und es würde das Ende des Codes verpassen. Es könnte sich lohnen, Atmel Studio auszuprobieren - es kann kleineren Code generieren (ich bin mir nicht sicher, ob Sie es einfach ausprobieren müssen).
ja @PeterJ Ich habe das auch versucht, aber nach cvavr, aber Code von cvavr, der perfekt in cv kompiliert wird, gibt Kompilierungsfehler in Atmel Studio. also habe ich es gelassen.

Der Flash-Speicher ist Ihr Programmspeicher. Dort wird Ihre Hex-Datei gespeichert. Sie können Daten in Flash zwingen, wenn Sie wenig RAM haben, aber es ist nicht so schnell beim Lesen / Schreiben wie RAM.

RAM ist der zur Laufzeit verwendete Speicher für Variablen und alles andere, auf das im laufenden Betrieb zugegriffen werden muss.

EEPROM ist ein nichtflüchtiger Speicher zum Speichern von Dingen wie Kalibrierungsdaten, Seriennummern usw. Es wird selten für Dinge verwendet, die regelmäßig geschrieben werden müssen.

@matt .hex geht also in den Flash und während der Ausführung werden Variablen im RAM erstellt, verwendet und dann zerlegt. Die Verwendung des EEPROM dient zum Speichern globaler Variablendaten oder Konstanten des Programms. Ist es die gesamte Struktur? Wenn dies nicht der Fall ist, sagen Sie mir bitte die richtige Interpretation des obigen Wissens.
Während die Ausführung jedes Programms von Flash (Code) und SRAM (Variable Heap/Stack) abhängt, ist die Verwendung des EEPROM völlig optional. EEPROM wird häufig verwendet, um beispielsweise Konfigurationsdaten zu speichern.

Informationen zur tatsächlichen Speichernutzung finden Sie in der Kartendatei. Im Falle der GCC-Toolkette, die per Linker wie folgt ausgeführt wird:

avr-ld -Map=app.map

oder durch gccFahrer:

avr-gcc -Wl,-Map,app.map