Sie haben ein Problem mit Huhn und Ei. Um genug Code laufen zu lassen, um mallocs zu machen oder sogar C-Code zu verwenden, haben Sie bereits Arbeitsspeicher.
Sie müssen Ihr Problem definieren. Zum Beispiel ist dies Design-Verifikation oder Produktionstests? Testen Sie den Speicherchip selbst oder die Platine. Normalerweise kaufen Sie funktionierende/getestete Chips (Speicher) oder Speicherchips, die eine vom Verkäufer definierte Qualität haben. Und Ihre Tests sind oft Produktionstests, die Herstellung von Lötpunkten. Die Datenleitungen, die Adressleitungen, die Steuerleitungen.
Das Huhn-und-Ei-Problem ist, dass Sie Software auf dem Embedded-Prozessor ausführen möchten, die Code erfordert, der irgendwo ausgeführt wird, und das bedeutet Speicher (könnte nur Flash sein und nicht oder minimal).Die ideale Situation besteht darin, entweder vollständig aus rom zu laufen, nur Prozessorressourcen oder nur interne Chipressourcen zu verwenden, und keinen externen RAM, so dass der externe RAM vollständig getestet werden kann. Jede Adresszeile usw. Andernfalls müssen Sie ein Schema erstellen oder Speicherbereiche deklarieren, um nicht getestet zu werden.
Oder nehmen Sie einen mehrstufigen Ansatz, der ROM-Boot-Code kann eine schnelle Überprüfung eines kleinen Teils des Widders tun, ohne es zu verwenden. Dann kopiere das Haupttestprogramm auf dieses kleine Stück RAM und laufe darin. Dann teste die Hauptspeicher-Tests mit mehr Code-Flexibilität. Kann C anstelle von Assembler zum Beispiel verwenden. Sie könnten zum Beispiel vor-Test, super einfacher Test, 25% des Widders, dann kopieren Sie den Test dort, testen Sie die anderen 75%, dann verschieben Sie das Programm auf weitere 25% im RAM-Raum und machen Sie den schweren Test auf dem ersten 25%, die einen vollen Test nicht bekommen haben.
Arten von Tests, müssen Sie die Fehler zu verstehen, möchten Sie möglicherweise Lötverbindungen insbesondere und Leiterplatten-Spuren zu testen. So können Sie offene Verbindungen haben, so dass Sie jeden Pin zu einer Eins und Null machen wollen, außerdem können Sie Shorts haben, die die Eins und Null abdecken, und Sie könnten "freundliche Bits" haben, wo benachbarte Pins einen Kurzschluss haben könnten Sie möchten, dass jedes Signalpaar unterschiedlich ist.
Oft Leute werden Tests wie alle, nur Nullen, 5s, As. Dann Checkerboard-Tests, bei denen ein Speicherplatz 5s und der nächste As hat. Für das Testen der Adressleitung müssen Sie Nicht-Potenzen von zwei verwenden, oder noch besser, jeder Speicherplatz im Speicher hat einen anderen Wert, zum Beispiel 32-Bit-Wörter, die jeweils ihre eigene Adresse erhalten.
Als einen schnellen Test beziehe ich das meiste davon in ein paar Tests, wenn Sie einen Pseudo Randomizer verwenden, etwas wiederholbar wie ein lfsr, einen Durchlauf, um den gesamten Speicher mit dem Randomizer zu füllen, neu zu seeden, zurück durch und prüfe. Gehe dann erneut durch und fülle mit invertierten Werten, re-seed und überprüfe invertierte Werte. Sie erhalten Adressbits, jede Datenzeile, aber nicht alle Nachbarn werden überprüft. Das erneute Seeding und das Starten von all dem über das Bewegen des Zufallsmusters kann das abdecken. manchmal nur mit dem Zufalls-Test als Adresstest und die traditionellen Nullen fins As, 3s, Cs, 6s, 9s usw.
so weit wie Ihr Zeiger auf Speicher im Test Sie nicht nur Malloc müssen Sie wissen, die Physische Adresse und behandeln Sie die Übersetzung falls vorhanden, so dass wenn Sie ein Problem haben, Sie in physischen Adressen kommunizieren. Außerdem weißt du und kontrollierst wieviel Speicher du hast. Normalerweise schreibe ich prozessorbasierte Tests in C, verwende aber keine C-Bibliotheksaufrufe (wie malloc oder printf oder ähnliches).
Google "Walking One" und "Walking Nullen" Memory-Test-Algorithmen – Throwback1986
Die allgemeine Idee, die Sie beschrieben haben, sollte funktionieren. Der Code, den Sie haben, ist nicht einmal in der Nähe. Zum Beispiel bin ich mir nicht sicher, was "! Int" eigentlich bedeuten soll, aber ich bin mir ziemlich sicher, dass kein richtig funktionierender Compiler das akzeptieren wird. –
Nicht genügend Informationen - hat Ihr Prozessor Cache? Wie steht es mit Ihrem Betriebssystem - hat es ein virtuelles Speichersystem? Interessiert es dich, an welche Adressen du schreibst? Außerdem macht dein Codebeispiel keinen Sinn. Was ist '! Int'? Die Verwendung von 'malloc()' scheint darauf hinzudeuten, dass Ihr Code aus dem RAM läuft - bedeutet das nicht, dass seine "grundlegende Integrität" in Ordnung ist? –