
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Lieber Dietmar, Ich danke dir für deine schnelle Antwort. Du hast mir genau DIE info gegeben die ich brauchte ! Bevor ich mich an eine Datenrettung wagte, wollte ich uber die Methode sicher sein, bevor ich beginne Daten oder Zeiger zu überschreiben. Ausserdem nervt mich es mit ein Controller zu arbeiten, wobei mann gar nicht weiss wie die Daten und Basicprogramm intern organisiert sind. Kein Memorymap ! Ich danke dir dewegen für dein Tipp. Beim undurchschaubaren "Blackbox V2.0" wusste ich nicht ob der Datenzeiger nach ein Basicprogramm Upload neu gesetzt wird oder nicht... Intuitiv dachte ich dass die Datenzeiger nach Upload neu gesetzt werden...was falsch ist ! Nun weiss ich dass der Datenzeiger NUR bei "Open# for Write" neu gesetzt werden. (Zeigt dann auf Basic Programmende) Darüber hinaus glaube ich jetzt zu verstehen warum mein Basicprogramm überhaupt abgestürzt ist... Wie vermutet, wurde warscheinlich ihr ende von den messdaten überschrieben...!!! Wie kam es denn dazu ? Hier ist meine eigenes Erklärungsversuch, ich weiss aber nicht ob sie richtig ist oder nicht: So geht das: -Mannn schreibt ein Basicprogramm, welches regelmässig Daten als sequenzielle datenfile speichert. -Beim "Power-Up" soll es auch ein Datenmarker, als "Power-Up flag" speichern, so dass man weiss dass es zu ein Stromausfall gekommen ist und dass es Messdaten fehlen könnten. -Das programm enthält eine "ClearMemory" Routine, die per eingabe eines codes per Keyboard aufgerufen wird. Diese routine "löscht" die Daten per "Open# for Write", idem es den Datenzeiger am Speicheranfang zurücksetzt (hinter Basictokens...wie ich es jetzt erfahren habe). Die "Logische Bombe" wird dann folgenderweise scharfgemacht: -Mann lässt den Controller ein paar tage arbeiten und dabei ein paar Daten aufzeichnen. -Mann erstellt inzwischen eine verbesserte version des programmes, dass etwas länger ist als die erste version. Diese version des Basicprogrammes wird auf einen frischgekauften controller durchgehend getestet und es werden auch keine Bugs festgestellt... -Dann nimmt mann diese neue version und macht ein "Update" des programmes auf den "gebrauchten " Controller, ohne dessen Datenspeicher zu löschen...Was sich dann später als fataler Fehler entpuppen wird! Dann kommt es zum "programmierten progressiven Absturz": -Der kontroller wird auf mission geschickt. -Nach ein paar Tage kommt es zu den progressiven Ausfall der LCD Anzeige, dessen anzeigetext sich schrittweise zersetzt, bis es zum fatalen Absturz kommt wo sich der Controller definitiv aufhängt. Die Messdaten sind nicht mehr abrufbar, da es nicht mehr zur Keyboard abfrage kommen kann. Indiz: Die gestörte LCD anzeigeroutine steht am Programmende ! Analyse: -Die nach Dietrmar's Rezept gerettete Messdaten sind heil, aber Sie folgen nicht die vorhergesagten 255'er bytes (datenspeichergrenze markierung) -Die BasicTokens der Unit kenne ich leider nicht, aber es gibt hinweise darauf (anhand heteromorphe programmbytes) dass das Programmende irgendwie überschrieben wurde... Shematisch ist warscheinlich folgendes passiert: B = BasicToken # = 255'er Byte Z = Speicherzelle worauf der aktuelle Datenzeiger zeigt Basicprogramm V1: BBBBBBBBBBBB#####Z Basicprogramm V1 auf mission, mit Messdaten: BBBBBBBBBBBB#####DDDDDDDDDDDDZ Basicprogramm Update auf V2: BBBBBBBBBBBBBBBBBBBBBBBBBBBBZBBBBBBBBB##### Uberschreibung des Basicprogrammes während Mission 2...LCD-Text defekt...bis definitiver Absturz: BBBBBBBBBBBBBBBBBBBBBBBBBBBBDDDZBBBBBB##### Ich hoffe dass die analyse des Problems andere mal helfen könnte ! Merci encore Dietmar pour ton précieux conseil ! Salut Nicolas > > Hallo Nicolas, > > > Wegen Gefahr eines eventuellen überschreiben der Daten, könnte man auch ein kürzeres Programm im Speicher laden um die Messdaten auszulesen ? > > genau so würde ich das machen. Das folgende Programm dumpt den Bereich hinter dem BASIC-Programm (genauer: Tokencode). Zu Beginn werden bis zur Flashpagegrenze ein paar 255er Bytes ausgegeben, dann folgt der Rest des alten Programms, dann vermutlich wieder ein paar 255er Bytes, sofern das alte Programm nicht an einer Flashpagegrenze endete, und dann die wichtigen Daten. Wenn der Kontroller irgendwann aus einem unzulässigen Speicher liest, hängt er sich wahrscheinlich auf. > > DEFINE daten WORD[1] > DEFINE hi BYTE[1] > DEFINE lo BYTE[2] > > OPEN# FOR READ > #endlos > INPUT# daten > PUT hi > PUT lo > GOTO endlos > > Halte uns auf dem Laufenden, ob das funktioniert. > > Gruß > Dietmar |
| Antwort schreiben |