Forum: Mikrocontroller und Digitale Elektronik f_gets FatFs Elm Chan


von Hans-Jörg (Gast)


Lesenswert?

Hallo,

ich komme mit der Funktion f_gets 
(http://elm-chan.org/fsw/ff/en/gets.html) aus der FatFs von ElmChan 
einfach nicht zurecht. Dazu kommt das ich noch ein blutiger Anfänger 
bin. Ich verstehe den Prototyp der Seite einfach nicht und Beispiele 
dazu finden sich überhaupt nicht. Kann mir vielleicht jemand ein kleines 
Beispiel liefern bin echt am verzweifeln.

Vielen Dank!

von Hans-Jörg (Gast)


Lesenswert?

Hallo nochmal, habe jetzt ein bisschen umprobiert und bin hierdrauf 
gekommen. Jedoch erhalte ich jedesmal die Fehlermeldung das CCS nicht 
weiß was mit den Funktionen f_gets und f_puts zu tun ist (unresolved 
symbol f_gets, first referenced in ./UserExperienceDemo/load.obj). Die 
Prototypen der Funktion sind jedoch in ff.h definiert welche ich 
natürlich auch angegeben habe. Mein Code sieht folgender Maßen aus:

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>

#include "msp430.h"
#include "HAL_Board.h"
#include "HAL_Buttons.h"
#include "HAL_Dogs102x6.h"
#include "HAL_SDCard.h"
#include "HAL_Wheel.h"
#include "SDCard.h"
#include "ff.h"
#include "check.h"
#include "Low.h"
#include "MassStorage.h"
#include "SDCard.h"


char *speicher;

// Function Prototypes
void ClearTempData(void);
void die(FRESULT rc);


void load()

{


    FATFS fatfs;         /* Work area (file system object) for drives */
    FIL config;          /* file objects */
    FRESULT rc;          /* FatFs function common result code */


    // Register volume work area (never fails)
    f_mount(0, &fatfs);

    // Open file config.txt:

    rc = f_open (&config, "config.txt", FA_OPEN_EXISTING | FA_READ);
    if (rc)
    {
        die(rc);
    }

    f_gets (speicher, 300, &config);

    // Close the file

    f_close (&config);

    f_mount(0, NULL);

    // Erstellen und schreiben

    FIL data;      /* file objects */


    // Register volume work area (never fails)
    f_mount(0, &fatfs);

    rc = f_open (&data, "data.txt", FA_WRITE | FA_CREATE_ALWAYS);
    if (rc)
    {
        die(rc);
    }

    f_puts (speicher, &data);                  // Write to file

    f_close (&data);

    f_mount(0, NULL);

    ClearTempData();
    MassStorage();

}


Die Protoypfunktionen aus ff.h sehen so aus:


int f_puts (const TCHAR*, FIL*);  /* Put a string to the file */
TCHAR* f_gets (TCHAR*, int, FIL*);  /* Get a string from the file */


Jetzt meine Frage was mache ich falsch? Kann mir diesen Fehler erhlich 
gesagt nicht erklären. Oder habe ich einen Fehler innerhalb der 
Funktionen gemacht?

Sitze seit zwei Tagen drann und weiß einfach nicht weiter hoffe jemand 
kann mir helfen!

von Karl H. (kbuchegg)


Lesenswert?

Hans-Jörg schrieb:
> Hallo,
>
> ich komme mit der Funktion f_gets
> (http://elm-chan.org/fsw/ff/en/gets.html) aus der FatFs von ElmChan
> einfach nicht zurecht. Dazu kommt das ich noch ein blutiger Anfänger
> bin. Ich verstehe den Prototyp der Seite einfach nicht und Beispiele
> dazu finden sich überhaupt nicht. Kann mir vielleicht jemand ein kleines
> Beispiel liefern bin echt am verzweifeln.

Sieht mir wie eine ganz stinknormale fgets Funktion aus, so wie sie in 
jeder C Implementierung enthalten ist und in jedem stinknormalen C-Buch 
beschrieben ist.

von Karl H. (kbuchegg)


Lesenswert?

Hans-Jörg schrieb:

> weiß was mit den Funktionen f_gets und f_puts zu tun ist (unresolved
> symbol f_gets, first referenced in ./UserExperienceDemo/load.obj).

unresolved symbol
ist eine typische Fehlermeldung vom Linker, der die Implementierung 
dieser Funktion nicht findet.

> Die
> Prototypen der Funktion sind jedoch in ff.h definiert

Die interessieren nicht. Über die würde sich der Compiler beschweren. Du 
hast aber eine Fehlermeldung vom Linker, der die tatsächlichen 
Funktionen (deren Implementierung) nicht finden kann. Hast du das 
C-File, in welchem die Funktionen enthalten sind compiliert und dem 
Linker mit zum Frass vorgeworfen?

von Karl H. (kbuchegg)


Lesenswert?

Was hat es mit diesem Abschnitt aus der Doku
1
QuickInfo
2
Available when _USE_STRFUNC is 1 or 2. When it is set to 2, '\r's contained in the file are stripped out.

auf sich? Kann es sein, dass die Implementierung in ff.c (?) mit einem 
#ifdef gekapselt ist und solange _USE_STRFUNC nicht auf mindestens 1 
steht, nicht mitkompiliert wird?

von Karl H. (kbuchegg)


Lesenswert?

Hast du auf der Projekthauptseite unter "Resources" die Verlinkung auf 
"Read First" gelesen? Da ist haarklein aufgeschlüsselt welche 
Konfigurationsoptionen es gibt (über #define) und was sie bewirken.

Wenn _USE_STRFUNC auf 0 gesetzt ist (und so wie es aussieht ist das der 
Default), dann ist die Funktion f_gets nicht verfügbar. -> die 
entsprechende Option auf 1 setzen und das sollte es dann schon gewesen 
sein.

von Hans-Jörg (Gast)


Lesenswert?

> unresolved symbol ist eine typische Fehlermeldung vom Linker,
> der die Implementierungvdieser Funktion nicht findet.

dessen bin ich mir bewusst dennoch danke.

> Hast du das C-File, in welchem die Funktionen enthalten sind compiliert
> und dem Linker mit zum Frass vorgeworfen?

ja ff.c wird mit berücksichtig wenn du das meinst.

> Available when _USE_STRFUNC is 1 or 2

Das wars! In der ffconf.h musste dies von 0 (default) auf 1 bzw. 2 
gesetzt werden. Manchmal ist man einfach ein bisschen zu blöd!

Vielen Vielend Danke!

von Marko R. (dr_marko_rocznik) Benutzerseite


Lesenswert?

Genau das gleiche Problem hatte ich auch - und hier die Lösung gefunden 
:-)

Vielen Dank!
 Marko

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.