Hallo achim,
Mit den Beispielen die ich genannt habe, kommt man sicher als
Hobbyprogrammierer weniger in Berührung.
Deine Ausführung zum RAM ist natürlich richtig und unstrittig.
Aber angenommen du möchtest Wissen, wieviel Heap oder Stack
von dem 1 kB verwendet wurden. Das geht einfach durch
Vorbelegung mit einem magic pattern, es geht auch anders.
Der AFFE ist ja ein magic pattern, das ist eine reine Angelegenheit der Definition !
Den Stack kannst du mit 0x00 oder irgendetwas vorbelegen.
Ich verwende oft die Task-ID, dann kann ich sehen zu welchem der Stack gehört.
Zudem Zeigen die meisten Hexdumper zusätzlich die Werte noch als ASCII an. Man kann also auch Text als Vorbelegung verwenden. Unter CP/M war es z.B. üblich den Stackbereich mit „STACK“ zu befüllen.
Wenn Du einen Prozessor-Busteilnehmer entwickelst (z.B. per
FPGA), der nicht den gesamten Adressbereich (sukkzessive)
verwendet, welchen wert gibst Du für unused area zurück? Wenn
alles funktioniert, die Beschreibung richtig ist, und der
Prozessor-Programmierer alles richtig implementiert hat, sind
0x0000 oder 0xffff o.k… Bei einem Fehler sind sie
unauffälliger als 0xAFFE. Welchen Wert verwendest Du
standardmäßig?
Bei 8-Bit-Zugriffen erkennt man den AFFEn nicht unbedingt.
Im Rahmen einer Erweiterbarkeit des Bausteins haben 0x00 und 0xFF aber auch ihre Vorteile.
Wenn das Ganze Decimal angezeigt wird, erübrigt sich der AFFE aber …
Eine 0x00 hat aber oft den Vorteil, dass das Rechenergebnis eindeutig aus dem Rahmen fällt oder sogar eine DIV_ZERO Exception auslöst. Mit 0xFF ergibt sich meist auch ein Ergebnis, welches auffällig ist. Wenn sich der AFFE aber im normalen Wertebereich befindet, bekommst du kein auffälliges Ergebnis.
Das einzige Sichere ist, wenn du einen Bus mit Parity verwendest. Dann kannst du dein FPGA so konstruieren, dass ein Fehler erzeugt wird.
Den ersten Speichertest vor Jahren bin ich ähnlich angegangen.
Er lässt sich aber auch, falls es Dich interessiert, einfach
gestalten, wenn man eine fortlaufende Zahl
in alle Adresen mit (1 bit = 1 alle anderen = 0) schreibt (und
danach zurückliest). Bei 1MB also gerade mal 20 (*2) Zugriffe.
Bei mehreren Speicherchips ist jeder entsprechend einzeln zu
testen.
Als Decodertest, fülle ich das RAM mit der Speicheradresse, ist dann je nach CPU ein 16- oder 32-Bit-Wert.
Über Speichertests wurden schon ganze Bücher geschrieben und je nachdem welchen Aspekt testen will, muss man unterschiedliche Methoden verwenden.
MfG Peter(TOO)