Forum: Compiler & IDEs fat_getFreeBytes() liefert immer nur 0


von Michael B. (planlessmichi)


Lesenswert?

Hallo Profis,

ich habe eben wieder mal ein Problem und scheine damit der einzige Dödel 
auf der Welt zu sein :-(
Ich benutze die MMC-Lib von :
http://www.mikrocontroller.net/articles/AVR_FAT32
und kann damit prima Dateien anlegen, schreiben, lesen.
Jetzt wollte ich auch mal dieses "fat_getFreeBytes()" probieren und das 
Teil liefert beim mir immer nur 0.
Wenn ich danach google, dann bekomme ich tatsächlich nur 8 Treffer und 
alle haben damit nichts zu tun.
Hardware ist ein ATMega2561V, mit 8MHz --> Siehe: 
Beitrag "Re: Atmega128 startet immer neu"
Die Funktion dauert grob 2 Sekunden und dann ist der return Wert eben 
immer 0.

Die MMC config sieht so aus:
1
// schalter die den funktionsumfang aendern bzw, den funktionsumfang einiger funktionen :)
2
#define MMC_WRITE                   TRUE
3
#define MMC_OVER_WRITE              TRUE
4
#define MMC_MULTI_BLOCK             FALSE
5
#define MMC_ENDIANNESS_LITTLE       TRUE
6
#define MMC_LFN_SUPPORT             TRUE
7
#define MMC_RM_FILES_ONLY           TRUE
8
9
// schalter die explizit funktionen mit kompilieren oder nicht!
10
#define MMC_TIME_STAMP              TRUE
11
#define MMC_RM                      FALSE
12
#define MMC_SEEK                    TRUE
13
#define MMC_MKDIR                   TRUE
14
#define MMC_GET_FREE_BYTES          TRUE
15
#define MMC_LS                      FALSE
16
#define MMC_CD                      TRUE
17
#define MMC_FILE_EXSISTS            TRUE
18
#define MMC_WRITE_STRING            TRUE
19
#define MMC_WRITEN                  FALSE

Also quasi (fast alles) enabled.

Mein Testcode sieht dann so aus:
1
char      puffer[25]; // 20+1 needed
2
uint64_t nFree = 0;
3
4
CountDown.sec.MMC_Timer = 3;
5
while ((CountDown.sec.MMC_Timer > 0) && (FALSE == bInitDone))
6
{
7
  bInitDone = mmc_init();
8
}
9
    
10
// Could the MMC card be initialized, or occurred a TimeOut
11
if (FALSE == bInitDone)
12
{
13
  SignalErrorCode(ERROR_CODE_MMC_NOT_INITIALIZED);
14
  while (1) {;}
15
}
16
    
17
// Try to load FAT file system
18
if(FALSE == fat_loadFatData())
19
{
20
  SignalErrorCode(ERROR_CODE_FAT_NOT_LOADED);
21
  while (1) {;}
22
}
23
      
24
nFree = fat_getFreeBytes();
25
26
uint64toa( nFree, puffer, 10 );
27
28
uart_puts("Freie Bytes: ");
29
uart_puts(puffer);
30
while(1)  {;}

Die Ausgabe ist dann eben immer: "Freie Bytes: 0"
Wenn ich statt der Funktion ein "nFree = 17179869184" mache, dann kommt 
auch "Freie Bytes: 17179869184".

Diese uint64toa ist auch hier aus dem Forum:
Beitrag "Re: uint64_t nach char[]"

Gibt es eine gewisse Reihenfolge, die ich einhalten muss oder was läuft 
da schief? Hat hier schon mal jemand das Problem gehabt?
Ich benutze übrigens eine komplett leere 1GB SD-Karte mit Fat16.

Viele Grüße,
Michael

von Michael B. (planlessmichi)


Lesenswert?

Scheint fast so, als ob die Lib entweder keiner verwendet, oder ich der 
einzige mit dem Problem bin, oder?

Vielleicht habe ich mit dieser Frage mehr Glück:
Anscheinend kann diese Lib auch keine Dateien umbenennen, was ich aber 
echt schön fände...

Darum die Frage an die breite Öffentlichkeit: Welche MMC-Libs setzt Ihr 
denn ein? Können die evtl. auch den freien Speicherplatz der Karte 
liefern und kann man mit denen auch Dateien umbenennen?

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
Noch kein Account? Hier anmelden.