Forum: Compiler & IDEs AVR-GCC: Stringkonstante wird nicht an Funktion übergeben


von Thomas B. (escamoteur)


Lesenswert?

Hi,

ich versuche gerade die FAT-Bibliothek von Elm Chan in Betrieb zu 
nehmen. Soweit klappt die Kommunikation mit der SD-Card, aber jetzt hab 
ich ein ganz anderes Problem. Eine Stringkonstante in der ich den 
Dateinamen definiere kommt nicht in der aufgerufenen Funktion an.
1
main{
2
  f_mount(0,&fs);
3
4
  err= f_open(&file1,"test2.txt",FA_CREATE_ALWAYS | FA_WRITE);
5
}
6
7
und so sieht der Anfang der Funktion aus
8
9
FRESULT f_open (
10
  FIL *fp,      /* Pointer to the blank file object */
11
  const XCHAR *path,  /* Pointer to the file name */
12
  BYTE mode      /* Access mode and file open mode flags */
13
)
14
{
15
  FRESULT res;
16
  DIR dj;
17
  NAMEBUF(sfn, lfn);
18
  BYTE *dir;
19
20
21
  fp->fs = NULL;    /* Clear file object */

Wenn ich in f_open mir den Wert von path ausgeben lasse bekomme ich nur 
einen leeren String angezeigt. (JTAG Debugging)

Woran kann das liegen?

Noch eine andere Sache die mich etwas beunruhigt: Der Compiler spukt am 
Ende die Message:

Program:    7726 bytes (23.6% Full)
(.text + .data + .bootloader)

Data:       2378 bytes (116.1% Full)
(.data + .bss + .noinit)

Woher kommen die 116,1%? Kann das was mit meinem Problem zu tun haben?

Gruß
Tom

von Karl H. (kbuchegg)


Lesenswert?

Was macht XCHAR?

von Stefan E. (sternst)


Lesenswert?

Thomas Burkhart schrieb:

> Woher kommen die 116,1%?

Dein Programm braucht mehr RAM, als du eigentlich hast.

> Kann das was mit meinem Problem zu tun haben?

Definitiv.

von Karl H. (kbuchegg)


Lesenswert?

Thomas Burkhart schrieb:

> Data:       2378 bytes (116.1% Full)
> (.data + .bss + .noinit)
>
> Woher kommen die 116,1%?

Keine Ahnung. Dazu musst du mal ins Map-File schauen und dir die SRAM 
Belegung raussuchen.

> Kann das was mit meinem Problem zu tun haben?
Möglich.
letztendes bedeutet das, dass du für globale Variablen mehr Speicher 
verbraucht hast, als dein µC überhaupt hat. Und da ist der Stack und 
lokale Variablen noch gar nicht eingerechnet.
Deine Schlussfolgerung?

von Thomas B. (escamoteur)


Lesenswert?

/* Type of file name on FatFs API */

#if _LFN_UNICODE && _USE_LFN
typedef WCHAR XCHAR;  /* Unicode */
#else
typedef char XCHAR;    /* SBCS, DBCS */
#endif


Ich hab _USE_LFN=0 , also char

Gruß
Tom

von Thomas B. (escamoteur)


Lesenswert?

Karl heinz Buchegger schrieb:
> Keine Ahnung. Dazu musst du mal ins Map-File schauen und dir die SRAM
> Belegung raussuchen.
>
>> Kann das was mit meinem Problem zu tun haben?
> Möglich.
> letztendes bedeutet das, dass du für globale Variablen mehr Speicher
> verbraucht hast, als dein µC überhaupt hat. Und da ist der Stack und
> lokale Variablen noch gar nicht eingerechnet.
> Deine Schlussfolgerung?

Hab jetzt einen buffer verkleinert und bin unter 100%, jetzt klappts.

Gruß
Tom

von Karl H. (kbuchegg)


Lesenswert?

Aus deinem Mapfile (wo ist das hingekommen?)


Allocating common symbols
Common symbol       size              file

Fatfs               0x464             main.o
Finfo               0x16              main.o
acc_dirs            0x2               main.o
acc_files           0x2               main.o
Timer               0x2               main.o
Buff                0x400             main.o
acc_size            0x4               main.o


Fatfs ist ziemlich gross
Buff ist ziemlich gross

Du hast insgesamt offenbar nur 0x800 (also 2K) Bytes. Die beiden 
Variablen zusammen brauchen aber schon 0x864

von Thomas B. (escamoteur)


Lesenswert?

Hatte den Post noch mal editiert, da das Map-File riesig und da Problem 
behoben war.

Gruß
Tom

von Karl H. (kbuchegg)


Lesenswert?

Thomas Burkhart schrieb:
> Hatte den Post noch mal editiert, da das Map-File riesig und da Problem
> behoben war.

Egal.
Beim nächsten mal weißt du, wo du nachsehen kannst.

von Thomas B. (escamoteur)


Lesenswert?

Dank Dir!
Tom

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.