mikrocontroller.net

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


Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht 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.
main{
  f_mount(0,&fs);

  err= f_open(&file1,"test2.txt",FA_CREATE_ALWAYS | FA_WRITE);
}

und so sieht der Anfang der Funktion aus

FRESULT f_open (
  FIL *fp,      /* Pointer to the blank file object */
  const XCHAR *path,  /* Pointer to the file name */
  BYTE mode      /* Access mode and file open mode flags */
)
{
  FRESULT res;
  DIR dj;
  NAMEBUF(sfn, lfn);
  BYTE *dir;


  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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was macht XCHAR?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Burkhart (escamoteur)
Datum:

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

Gruß
Tom

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dank Dir!
Tom

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.