Hi, kurze Frage an die FAT Experten. In nem Cluster 4 (ab Sektor 711) sind bei mir 36 Sektoren. Dort ist der Inhalt einer TXT Datei laut FAT. Wenn ich ab Cluster 4 den ersten Sektor ausgebe, kommt erst jede Menge Quatsch und dann der richtige Inhalt. Ist es nicht festgelegt das die Daten immer im 1ten Sektor des Clusters anfangen muss ? Oder kann das dort abgelegt sein wie es will ? MfG David
In einem Cluster sind mit Sicherheit NIE 36 Sektoren enthalten. Das sind immer glatte Zweierpotenzen. Dein Algorithmus zur Clustergrößenberechnung scheint daher fehlerhaft zu sein, und damit auch die Bestimmung der zu einem Cluster gehörenden Sektoren.
sorry tippfehler sind 64 kein algo. ist einfach aus dem VBR ausgelesen
Und wie erklärst Du dann, daß der erste Sektor in einem 64 Sektoren (also 32 kiByte) großen Cluster die Nummer 711 haben soll?
das interessiert mich nicht, die nummern sind fiktiv, ich wollte eig. nur wissen ob daten im cluster immer bei sektor 1 beginnen. aber hier: mein cluster offset ist sektor 647 da fängt der erste cluster an, und 711 ist der zweite cluster usw.
Alle Sektoren, aus denen ein Cluster besteht, sind linear hintereinander angeordnet, der erste Sektor ist der erste Sektor. Wenn Du eine bekannte Datei liest, aber der erwartete Inhalt nicht an der erwarteten Stelle steht, hast Du einen Positionierungsfehler. Um wieviele Sektoren (512-Byte-Schritte) ist denn Dein Dateianfang verschoben? Dein "cluster offset" ist vermutlich um genau diesen Wert zu klein.
hey rufus, des problem war tat. das meine clustergröße falsch war, ich habe mit einer Funktion init die clustergröße rausgelesen unsigned char cluster_size;
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
Ich ändere in der Funktion nichts! wenn ich cluster_size static mache dann merkt er sich den Inhalt. Komisch oder ?
Gast
#1610705
Schreib einfach was Markantes rein und prüfe dann wo es steht. http://de.wikipedia.org/wiki/File_Allocation_Table
jo, wie gesagt passt schon, das problem ist das meine variable geändert wird ohne dass ich was dran mache. Es gibt auch keine Referenz darauf, hmm... wenn ich die variable mit const deklariere und den 1ten zugriff rausmache, dann meckert der compiler nicht, also kann ich davon ausgehen, dass mir die niemand mit der original referenz ändert
Ohne Deinen Quelltext zu sehen, ist es natürlich schwierig, herauszufinden, warum Dein Variablenzugriff fehlschlägt bzw. welcher Effekt da auftritt.
im prinzip sinds zwei funktionen, ich ruf die init auf, und in der init die fat_root_dir, und wenn ich von der fat_root_dir zurückkehre ist meine variable ansatt 64, 36 außer ich mach se static
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
Gast
#1611140
>FAT_DEBUG("cluser size :%d \n",cluster_size); // ist 36 !!!
Ob das wirklich so ist?
Du verrechnest dich dauernd! Und das an mehreren Stellen.
fat_offset = Buffer[14] + (Buffer[15] << 8);
Was ist ein unsigned char wert << 8? Genau, Null.
fat_offset = Buffer[14] + ((uint16_t)Buffer[15] << 8);
holger schrieb:
> Was ist ein unsigned char wert << 8? Genau, Null.
ne, wie kommst du da drauf ?
Habs grad getestet:
1 | |
2 | |
3 | |
4 | |
ausgabe: 0x1101
>> so rum is null , also 0
Dann ist Dein Compiler gutmütig eingestellt und macht bei Schiebeoperationen eine automatische Typerweiterung.
jo , ich werds auf jeden fall ändern
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.