Hallo, zusammen, ich möchte ein Programm schreiben, mit dem man die RAM-Fehlern stetig bestimmen und ROM und EEPROM-Fehlern beim Start entdecken kann. Aber ich habe keine Ahnung damit. Kann jemand mir ein Tipp vielleicht geben? Vielen Dank
ROM-Fehler ist einfach. Frisch beim/nach dem Programmieren CRC vom gesamten Inhalt berechnen und irgendwo speichern, ob nun mit im ROM oder im EEPROM. Und gelegentlich zur Start- oder auch Laufzeit mal überprüfen. RAM-Fehler beim Start wird interessanter, weil's eigentlich nur in Assembler möglich ist und wenn trotzdem C verwendet werden soll, dann zu einem Zeitpunkt nötig ist, bevor der C Startupcode auch nur spitzkriegt dass es ihn gibt. Dafür haben permanente RAM-Fehler den Vorteil, nachträglich eher selten aufzutreten, während Flash-ROM prinzipbedingt deutlich empfindlicher ist.
Rom: - Beim erzeugen des Hexfiles eine CRC berechnen und diese im Rom ablegen. - Beim Programmstart den CRC des Rom berechnen und mit der abgelegten CRC vergleichen. - Mit abspeichern der Zwischenwerte lässt sich sowas auch während der Programmausführung machen, indem pro Zeiteinheit nur einige Romzellen berechnet werden und nach einer längeren Zeit die berechnung dann komplett ist. Ram: - irq sperren - Inhalt der zu prüfenden RAM Zelle an eine andere Stelle kopieren (retten) - verschieden Muster (zb 0x00, 0x55, 0xAA, 0xFF) in die zu püfende RAM Zelle schreibe und wieder auslesen - abschließend den geretten Wert wieder in die RAM zele zurückschreiben - irq wieder freigeben EEPROM: - das EEPROM in Datenblöcke unterteilen und jeden Datenblock mit einer eigene CRC absichern - bei jedem Zugriff diese CRC prüfen
Hallo, bevor du los legst musst du dir darüber klar werden welche Fehler du im RAM erkennen willst. Es gibt Tests zum Erkennen von statischen Fehlern und Tests zum Erkennen von Querschlüssen zwischen Speicherzellen. a) Statische Fehler bedeutet: wenn ein Bit ständig auf 1 oder 0 fest hängt egal welchen Wert man reinschreibt (== Speicherzelle kaputt) b) Querschlüsse bedeutet: wenn man z.B. Bit 1 von Byte 100 ändert, ändert sich ungewollt auch Bit 5 von Byte 30 mit (== Speicherzellen haben aufgrund eines Fehlers eine Verbindung auf dem Chip) Für den Test a bedeutet das z.b. wie folgt: falls nötig: interrupts deaktivieren; für alle RAM-bytes x von SPEICHERGRÖßE { wert von RAM-Byte x sichern; RAM-Byte x mit 0xAA beschreiben; RAM-Byte x auslesen und gelesenen wert mit 0xAA vergleichen; -->fehler wenn wert nicht gleich ist RAM-Byte x mit 0x55 beschreiben; RAM-Byte x auslesen und gelesenen wert mit 0x55 vergleichen; -->fehler wenn wert nicht gleich ist sicherung von RAM-Byte zurück schreiben; } interrupts wieder frei geben; Wenn man den Speicher in einzelne Bereiche aufteilt kann man den Test auch gut im vollen Betrieb durchführen. Bei den Tests für Querschlüsse gibt es das Problem, dass die einzelnen Bereiche komplett mit einem durchlaufenden Muster gefüllt werden müssen und somit alle Bytes des Bereiches irgendwo hin zwischengespeichert werden müssen (und auch der Stack umgelegt werden muss). Diese Tests nennen sich dann z.B. (google) - March C (oder March B ?) - transparenter Galpat Test ... Der Check des ROM-Speichers ist da schon einfacher und sollte eigentlich auch problemlos im laufenden Betrieb funktionieren. --> Einfach vom Compiler/Linker an das Ende des Flash-Speichers eine CRC Checksumme eintragen lassen (z.B. 2 Byte) und im Betreib z.B. in jedem Main-Durchlauf ein ROM-Byte auslesen und damit schön langsam über eine Entsprechnede CRC-Berechnungs-Funktion den CRC Wert berechnen. Am Ende dann den berechneten Wert mit dem Wert aus dem Flash-Speicher vergleichen. Falls du auch mal google,de befragen willst, würde ich dir emfehlen nach folgenden Begriffen zu suchen: - software class b / software class c - stuck-at error galpat test walkpat test / abraham test - CRC16 Technical Note 91733 AVR998
Hallo , wie kann ich aus eine RAM-zelle einen Wert von eine Variable auslesen? dies brauche ich um RAM-test durchzuführen. ich arbeite mit C.
Hallo zusammen, ich brauche Hilfe um RAM-fehler zu entdecken. habe hier oben den Kommentar gelesen aber nicht verstanden, kann jemand es vielleicht erklären???:-((( bin für jeden Tip Dankbar ! zitat: "Ram: - irq sperren - Inhalt der zu prüfenden RAM Zelle an eine andere Stelle kopieren (retten) - verschieden Muster (zb 0x00, 0x55, 0xAA, 0xFF) in die zu püfende RAM Zelle schreibe und wieder auslesen - abschließend den geretten Wert wieder in die RAM zele zurückschreiben - irq wieder freigeben "
Hallo! Ich fürchte leider, dass man es nicht wesentlich einfacher erklären kann. Wenn Du schon bei dieser Beschreibung Probleme hast, kämen vielleicht Bilder in Frage. Legastheniker?
Hallo , vielleicht an Hand von Beispielen erklären, wenn es geht???
Hier im Forum gilt eigentlich immer Hilfe zur Selbsthilfe. Schreibe uns doch einfach erstmal dein geplantes Vorgehen wie du das die vorstellst. Dann kommen auch Hinweise auf Fehler und Tipps wie man es besser machen könnte.
Sagen kann man eigentlich nur, was man allen Anfängern sagen sollte. Recherchiere, lies dich ein und wenn du dann gezielte Fragen hast, stell sie hier. Ansonsten lass es.
Hallo, ..also ich habe die Checksumme berechnet, diese Checksumme möche ich in eine Ram-zelle speichern. meine Frage lautet : wie speichere ich die Checksumme in eine RAM-zelle?
>meine Frage lautet : wie speichere ich die Checksumme in eine RAM-zelle?
Hääää?
Peter schrieb: > Hallo , > > vielleicht an Hand von Beispielen erklären, wenn es geht??? Oder vortanzen? Mal ehrlich, was verstehst du daran nicht? > meine Frage lautet : wie speichere ich die Checksumme in eine RAM-zelle? Eine Ram-Zelle ist eine Speicherstelle im RAM. WIE du da rein schreibst hängt von deiner Programmiersprache ab. In ASM gibt es, je nach Controller, spezielle Befehle um den RAM zu lesen und zu schreiben. Aber sag mal, warum benötigt jemand, mit deinem fulminanten Wissen, überhaupt eine RAM/ROM Prüfung? Selbst wenn dein Code intakt ist, was könnte man dann überhaupt davon erwarten?
:
Bearbeitet durch User
Li schrieb: > habe keine Ahnung damit. Kann jemand mir ein Tipp vielleicht geben? 1.https://www.mikrocontroller.net/articles/AVR-Tutorial 2.Nimm lieber gleich was Fertiges. RAM prüfen nur mit 0000 oder 1111 bringt nur einfachste Fehler ans Licht. Die seltenen, echt tückischen Fehler findet erst ein richtiger Ramtest mit Zufallszahlen. 3.Die meisten Fehler sind auf OSI Layer 8.
oszi40 schrieb: > erst ein richtiger Ramtest mit Zufallszahlen. Meine Güte, so wenig Ahnung muß man erstmal haben. Wer verwendet denn bitte schön Zufallszahlen für RAM-Tests? Also außer dir.
Fred schrieb: >> erst ein richtiger Ramtest mit Zufallszahlen. > Meine Güte, so wenig Ahnung muß man erstmal haben. > Wer verwendet denn bitte schön Zufallszahlen für RAM-Tests? Also außer > dir. Das funktioniert seit ca. >20 Jahren recht erfolgreich. Weil man damit doppelte Adressen und Einzelfälle herausbekommt. Wenn Du bessere Ideen hast, kannst Du sie uns gern alle verraten.
Kapitel A5 und die dort aufgeführten Literaturstellen. http://www.cechina*cn/ELetter/Standard/safety/IEC61508-7.pdf * durch . ersetzen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.