SD-Karte asm Code

OP #4308501
Lesenswert?
• ▲
▼
Hallo,

ich verwende seit geraumer Zeit einen abgewandelten Code von

Beitrag "Re: SD-Karte Initialisierung Read Write FAT ATmega8 (Assembler)"

für einen GPS-Logger.

Eigentlich funktioniert auch alles gut, nur habe ich das Problem, daß 
die Kommunikation mit der Karte in der Regel nicht sofort startet. Ich 
muß dann bei anliegender Spannung die Karte entfernen und erneut 
einschieben. Dann funktioniert es problemlos. Woran könnte das liegen?
OP #4308655
Lesenswert?
• ▲
▼
Falk B. schrieb:
> An einer falschen Initialisierung.
> Möglicherweise muss man nach dem Reset ein paar hundert Millisekunden
> warten.

Danke für den Hinweis!

Leider liegt es daran nicht. Auch eine Pause von 1s hat nicht geholfen. 
Ich habe jetzt mal detaillierter getestet und festgestellt, daß das 
Programm hier hängen bleibt:
1
LETZTEN_BESCHRIEBENEN_CLUSTER_DER_DATEI_SUCHEN:
2
;-------------------------------------------------------------------------------
3
; den ENDE-CLUSTER in FAT suchen                        
4
;-------------------------------------------------------------------------------
5
  ; INITIALISIEREN auf STARTCLUSTER      
6
  LDS    temp1,(adr_DATEI_STARTCLUSTER_L)
7
  LDS    temp2,(adr_DATEI_STARTCLUSTER_H)
8
  STS    (adr_CLUSTER_DATENSATZ_NR_L),temp1
9
  STS    (adr_CLUSTER_DATENSATZ_NR_H),temp2
10
LETZTEN_BESCHRIEBENEN_CLUSTER_DER_DATEI_SUCHEN_SCHLEIFE:
11
  ; FAT EINTRAG auslesen, bis letzter FAT Eintrag (xFF xFF) gefunden wurde  
12
  WDR
13
  rcall  FAT_TABELLE_EINTRAG_AUSLESEN 
14
  ; AUSWERTUNG (ist es der letzte Cluster)  
15
  LDS    temp1,(adr_CLUSTER_INHALT_BYTE_L)
16
  LDS    temp2,(adr_CLUSTER_INHALT_BYTE_H)
17
  cpi    temp1,255
18
  brne  LETZTEN_BESCHRIEBENEN_CLUSTER_DER_DATEI_SUCHEN_SCHLEIFE_w
19
  cpi    temp2,255
20
  brne  LETZTEN_BESCHRIEBENEN_CLUSTER_DER_DATEI_SUCHEN_SCHLEIFE_w
21
  rjmp  LETZTEN_BESCHRIEBENEN_CLUSTER_DER_DATEI_SUCHEN_GEFUNDEN
22
LETZTEN_BESCHRIEBENEN_CLUSTER_DER_DATEI_SUCHEN_SCHLEIFE_w:   
23
  ; Inhalt übernehmen und erneut FAT einlesen 
24
  LDS    temp1,(adr_CLUSTER_INHALT_BYTE_L)
25
  LDS    temp2,(adr_CLUSTER_INHALT_BYTE_H)
26
  STS    (adr_CLUSTER_DATENSATZ_NR_L),temp1
27
  STS    (adr_CLUSTER_DATENSATZ_NR_H),temp2  
28
  rjmp  LETZTEN_BESCHRIEBENEN_CLUSTER_DER_DATEI_SUCHEN_SCHLEIFE    
29
LETZTEN_BESCHRIEBENEN_CLUSTER_DER_DATEI_SUCHEN_GEFUNDEN:
30
  ; gefunden => speichern            
31
  LDS    temp1,(adr_CLUSTER_DATENSATZ_NR_L)
32
  LDS    temp2,(adr_CLUSTER_DATENSATZ_NR_H)
33
  STS    (adr_CLUSTER_ENDECLUSTER_L),temp1
34
  STS    (adr_CLUSTER_ENDECLUSTER_H),temp2

d.h. das Programm sucht eine bestimmte Datei, findet sie auch (obwohl 
sie gar nicht vorhanden ist) und bleibt dann bei der Suche nach dem 
letzten beschriebenen Cluster hängen.
Evtl. hat es etwas damit zu tun, daß die Datei ja nur als gelöscht 
gekennzeichnet wird und gar nicht gelöscht.
Gast #4308804
Lesenswert?
• ▲
▼
Bruno M. schrieb:

> Leider liegt es daran nicht. Auch eine Pause von 1s hat nicht geholfen.
> Ich habe jetzt mal detaillierter getestet und festgestellt, daß das
> Programm hier hängen bleibt:
[...]
> d.h. das Programm sucht eine bestimmte Datei, findet sie auch (obwohl
> sie gar nicht vorhanden ist) und bleibt dann bei der Suche nach dem
> letzten beschriebenen Cluster hängen.

D.h.: Der eigentliche Scheiß passiert bereits lange vor der Stelle, die 
du hier geposted hast. Wenn der Code eine Datei findet, die auf dem 
Medium garnicht existiert, dann ist der Code schlicht kaputt. Oder die 
Strukturen des Filesystems. So einfach ist das.

Und wenn die C-Apologeten hier rumtönen, dass das an der Verwendung von 
Asm liegen würde, ist das natürlich völliger Quatsch.

Ganz genau wie in C ist es einfach nötig, fehlerfreien Code zu benutzen 
und diesen dann auch fehlerfrei zu benutzen.

Beispiel: Wie lange hat es doch gleich gedauert, bis der ext4-fs-Treiber 
für Linux (natürlich vollständig in C geschrieben) so stabil war, daß er 
auch tatsächlich freiwillig verwendet wurde? Jahre!!! Und der konnte 
immerhin in weiten Teilen auf gut getesteten Code von ext2 und ext3 
zurückgreifen.

Also: natürlich kann in dem von dir verwendeten FS noch ein fieser Bug
lauern. Aber der ist in Asm weder wahrscheinlicher noch schwerer zu 
finden oder zu beheben als in C. Nur die wirklich leicht zu findende 
Bugs sind in Asm deutlich wahrscheinlicher als in C. Der Rest der Lügen 
über die angeblich höhere Fehlerträchtigkeit von Asm ist reine 
Propaganda.
Gast #4308811
Lesenswert?
• ▲
▼
> ... die C-Apologeten hier rumtönen ...

Außer dir tönt hier keiner. Du bist der geborenen Großsprecher und 
Krakeeler. Das interessante dabei ist, dass vor dir nie eine Lösung 
kommt, sondern nur langweilige Beiträge mit Geschwätz.
Persönliche Seite #4308841
Lesenswert?
• ▲
▼
Bruno M. schrieb:
> Woran könnte das liegen?

Warum fragst Du nicht Bernhard S. selber? Der ist nach wie vor im Forum 
aktiv und wird seinen Code und die zugehörige Thematik am besten kennen!

Abel schrieb:
> Außer dir tönt hier keiner. Du bist der geborenen Großsprecher und
> Krakeeler.

Das hat Asm doch gar nicht nötig.
Dessen Vorteile sind viel zu eindeutig!
Gast #4308890
Lesenswert?
• ▲
▼
Abel schrieb:

> Außer dir tönt hier keiner.

Dir fällt das nur nicht so auf, weil du bereits hinreichend 
gehirnamputiert wurdest.

> Das interessante dabei ist, dass vor dir nie eine Lösung
> kommt

Ah ja. Du hast also rein garnichts von dem ganzen Zeug auch nur 
verstanden, was ich gepostet habe.

OK, ich gebe zu, da waren durchaus auch einige Rohrkrepierer dabei. Aber 
in der überwiegenden Mehrheit war es doch durchaus zielführende Hilfe 
zur Selbsthilfe.

Ja, von mir gibt's fast niemals fertigen Code für's stupide 
C&P-"Programmieren". Das ist so gewollt. Ich bin im Gegensatz zu den 
C-Apologeten eben nicht daran interessiert, einen Haufen willfährige 
Idioten als schleimerisches Fußvolk zu gewinnen. Nein, ich will 
selbstständig denkende, echte Programmierer aus der Masse der 
C&P-Vollidioten herausheben. Die sind, weiß Gott, verdammt knapp 
geworden...
Gast #4308902
Lesenswert?
• ▲
▼
Sicherheitshalber könnte man die SDC auf einer anderen Platform testen. 
Wenn man experimentiert kann es passieren dass die Karte einen Defekt 
kriegt manche Sektoren nicht mehr lesbar sind und dann ihre Position 
ständig verändern. Das Problem deutet sich dann so wie beschrieben an. 
Erst nach vielfältigen Resets und auch Ausprobieren von verschiedenen 
Adaptern kriegt man die Karte korrekt ins Laufen. Das wird dann immer 
schlimmer.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.