Report
1 year, 6 months ago.

MBED SD Card File system not compiling on VisualGDB

Hi

I am using VisualGDB with MBED STM32L476 (DISCO L476).

I want to interface the CPU to a SD card. I imported the SD Card File system

https://os.mbed.com/cookbook/SD-Card-File-System

Which is debugged, compiles and works great on MBED compiler.

The problem is I get these bugs in FATFileHandle.h after compilation in VisualGDB:

conflicting return type specified for ‘virtual off_t FATFileHandle::size()’

  1. ifndef MBED_FATFILEHANDLE_H
  2. define MBED_FATFILEHANDLE_H
  1. include “FileHandle.h”

using namespace mbed;

class FATFileHandle : public FileHandle { public:

FATFileHandle(FIL fh); virtual int close(); virtual ssize_t write(const void* buffer, size_t length); virtual ssize_t read(void* buffer, size_t length); virtual int isatty(); virtual off_t lseek(off_t position, int whence); virtual int fsync(); virtual off_t flen();

virtual off_t seek(off_t position, int whence) { return lseek(position, whence); } virtual off_t size() { return flen(); }

protected:

FIL _fh;

};

  1. endif

and also in FileHandle.h:

overriding ‘virtual size_t mbed::FileHandle::size()’

  1. ifndef MBED_FILEHANDLE_H
  2. define MBED_FILEHANDLE_H

typedef int FILEHANDLE;

  1. include <stdio.h>
  2. include “platform/platform.h”

namespace mbed { / \addtogroup drivers */ / @{*/

/ Class FileHandle

  • An abstract interface that represents operations on a file-like
  • object. The core functions are read, write, and seek, but only
  • a subset of these operations can be provided.
  • @note to create a file, @see File
  • @note Synchronization level: Set by subclass
  • / class FileHandle { public: virtual FileHandle() {}

/ Read the contents of a file into a buffer

  • @param buffer The buffer to read in to
  • @param size The number of bytes to read
  • @return The number of bytes read, 0 at end of file, negative error on failure
  • / virtual ssize_t read(void *buffer, size_t size) = 0;

/ Write the contents of a buffer to a file

  • @param buffer The buffer to write from
  • @param size The number of bytes to write
  • @return The number of bytes written, negative error on failure
  • / virtual ssize_t write(const void *buffer, size_t size) = 0;

/ Move the file position to a given offset from from a given location

  • @param offset The offset from whence to move to
  • @param whence The start of where to seek
  • SEEK_SET to start from beginning of file,
  • SEEK_CUR to start from current position in file,
  • SEEK_END to start from end of file
  • @return The new offset of the file
  • / virtual off_t seek(off_t offset, int whence = SEEK_SET) = 0;

/ Close a file

  • @return 0 on success, negative error code on failure
  • / virtual int close() = 0;

/ Flush any buffers associated with the file

  • @return 0 on success, negative error code on failure
  • / virtual int sync() { return 0; }

/ Check if the file in an interactive terminal device

  • @return True if the file is a terminal
  • / virtual int isatty() { return false; }

/ Get the file position of the file

  • @note This is equivalent to seek(0, SEEK_CUR)
  • @return The current offset in the file
  • / virtual off_t tell() { return seek(0, SEEK_CUR); }

/ Rewind the file position to the beginning of the file

  • @note This is equivalent to seek(0, SEEK_SET)
  • / virtual void rewind() { seek(0, SEEK_SET); }

/ Get the size of the file

  • @return Size of the file in bytes
  • / virtual size_t size() { off_t off = tell(); size_t size = seek(0, SEEK_END); seek(off, SEEK_SET); return size; }

/ Move the file position to a given offset from a given location.

  • @param offset The offset from whence to move to
  • @param whence SEEK_SET for the start of the file, SEEK_CUR for the
  • current file position, or SEEK_END for the end of the file.
  • @returns
  • new file position on success,
  • -1 on failure or unsupported
  • / MBED_DEPRECATED_SINCE(“mbed-os-5.4”, “Replaced by FileHandle::seek”) virtual off_t lseek(off_t offset, int whence) { return seek(offset, whence); }

/ Flush any buffers associated with the FileHandle, ensuring it

  • is up to date on disk
  • @returns
  • 0 on success or un-needed,
  • -1 on error
  • / MBED_DEPRECATED_SINCE(“mbed-os-5.4”, “Replaced by FileHandle::sync”) virtual int fsync() { return sync(); }

/ Find the length of the file

  • @returns
  • Length of the file
  • / MBED_DEPRECATED_SINCE(“mbed-os-5.4”, “Replaced by FileHandle::size”) virtual off_t flen() { return size(); } };

/ @}*/ } namespace mbed

  1. endif

Question relating to:

The 32L476GDISCOVERY helps users to develop and share applications with the STM32L4 ultra-low-power microcontrollers.
Comment on this question
Be the first to answer this question.

To post an answer, please log in.