fat_getFreeBytes() liefert immer nur 0

OP #3001766
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
OP #3005597
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?

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.