Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 2:ca35ecd2fae6, committed 2015-04-05
- Comitter:
- frankvnk
- Date:
- Sun Apr 05 10:04:44 2015 +0000
- Parent:
- 1:a3cb118c4f6e
- Commit message:
- 2 options added: The ability to include a header file containing the binary file system image built with fsbld and the ability to set the system flash size.
Changed in this revision
--- a/FlashFileSystem.cpp Wed Aug 03 22:29:40 2011 +0000
+++ b/FlashFileSystem.cpp Sun Apr 05 10:04:44 2015 +0000
@@ -402,12 +402,17 @@
Parameters:
pName is the root name to be used for this file system in fopen()
pathnames.
+ pFlashDrive (optional) is a pointer to the read-only file system (const char array).
+ When pFlashDrive is not specified, it is up to the user to append the
+ read-only file system file to the compiled binary.
+ FlashSize (optional) is the size of the FLASH (KB) on the device to
+ search through for the file system signature (default = 512).
*/
-FlashFileSystem::FlashFileSystem(const char* pName) : FileSystemLike(pName)
+FlashFileSystem::FlashFileSystem(const char* pName, const uint8_t *pFlashDrive, const uint32_t FlashSize) : FileSystemLike(pName)
{
static const char FileSystemSignature[] = FILE_SYSTEM_SIGNATURE;
SFileSystemHeader* pHeader = NULL;
- char* pCurr = (char*)FILE_SYSTEM_FLASH_SIZE - sizeof(pHeader->FileSystemSignature);
+ char* pCurr = (char*)(FlashSize * 1024) - sizeof(pHeader->FileSystemSignature);
// Initialize the members
m_pFLASHBase = NULL;
@@ -417,18 +422,25 @@
// Scan backwards through 512k FLASH looking for the file system signature
// NOTE: The file system image should be located after this code itself
// so stop the search.
- while (pCurr > FileSystemSignature)
+ if(pFlashDrive == NULL)
{
- if (0 == memcmp(pCurr, FileSystemSignature, sizeof(pHeader->FileSystemSignature)))
+ while (pCurr > FileSystemSignature)
{
- break;
+ if (0 == memcmp(pCurr, FileSystemSignature, sizeof(pHeader->FileSystemSignature)))
+ {
+ break;
+ }
+ pCurr--;
}
- pCurr--;
+ if (pCurr <= FileSystemSignature)
+ {
+ TRACE("FlashFileSystem: Failed to find file system image in ROM.\n");
+ return;
+ }
}
- if (pCurr <= FileSystemSignature)
+ else
{
- TRACE("FlashFileSystem: Failed to find file system image in RAM.\n");
- return;
+ pCurr = (char *)pFlashDrive;
}
if (((unsigned int)pCurr & 0x3) != 0)
{
--- a/FlashFileSystem.h Wed Aug 03 22:29:40 2011 +0000
+++ b/FlashFileSystem.h Sun Apr 05 10:04:44 2015 +0000
@@ -121,22 +121,40 @@
-/** A filesystem for accessing a read-only file system placed in the internal
- * FLASH memory of the NXP chip on the mbed board.
+/** A filesystem for accessing a read-only file system placed in the internal\n
+ * FLASH memory of the mbed board.
+ *\n
+ * The file system to be mounted by this file system should be created through\n
+ * the use of the fsbld utility on the PC.\n
+ *\n
+ * As fsbld creates two output files (a binary and a header file), there are two\n
+ * ways to add the resulting file system image:\n
+ * -# Concatenate the binary file system to the end of the .bin file created\n
+ * by the mbed online compiler before uploading to the mbed device.\n
+ * -# Import the header file into your project, include this file in your main\n
+ * file and add 'roFlashDrive' to the FlashfileSystem constructor call.\n
+ * eg : static FlashFileSystem flash("flash", roFlashDrive);\n
*
- * The file system to be mounted by this file system should be created through
- * the use of the fsbld utility on the PC and the resulting file system image
- * concatentated to the end of the .bin file created by the mbed online
- * compiler before uploading to the mbed device.
- *
- * NOTE: This file system is case-sensitive. Calling fopen("/flash/INDEX.html")
- * won't successfully open a file named index.html in the root directory
- * of the flash file system.
+ * A third (optional) parameter in the FlashfileSystem constructor call allows\n
+ * you to specify the size of the FLASH (KB) on the device (default = 512).\n
+ * eg (for a KL25Z device) : static FlashFileSystem flash("flash", NULL, 128);\n
+ * Note that in this example, the pointer to the header file has been omitted,\n
+ * so we need to append the binary file system ourselves (see above).\n
+ * When you use the binary file system header in your main file, you can\n
+ * use the roFlashDrive pointer.\n
+ * eg (for a KL25Z device) : static FlashFileSystem flash("flash", roFlashDrive, 128);\n
+ *\n
+ * NOTE: This file system is case-sensitive. Calling fopen("/flash/INDEX.html")\n
+ * won't successfully open a file named index.html in the root directory\n
+ * of the flash file system.\n
*
* Example:
* @code
#include <mbed.h>
#include "FlashFileSystem.h"
+// Uncomment the line below when you imported the header file built with fsbld
+// and replace <Flashdrive> with its correct filename
+//#include "<FlashDrive>.h"
static void _RecursiveDir(const char* pDirectoryName, DIR* pDirectory = NULL)
{
@@ -210,7 +228,11 @@
char Buffer[128];
// Create the file system under the name "flash".
+ // NOTE : When you include the the header file built with fsbld,
+ // disable the first static FlashFileSystem... line
+ // and enable the second static FlashFileSystem... line.
static FlashFileSystem flash("flash");
+// static FlashFileSystem flash("flash, roFlashDrive");
if (!flash.IsMounted())
{
error("Failed to mount FlashFileSystem.\r\n");
@@ -261,7 +283,7 @@
class FlashFileSystem : public FileSystemLike
{
public:
- FlashFileSystem(const char* pName);
+ FlashFileSystem(const char* pName, const uint8_t *pFlashDrive = NULL, const uint32_t FlashSize = 512);
virtual FileHandle* open(const char* pFilename, int Flags);
virtual DirHandle* opendir(const char *pDirectoryName);
--- a/ffsformat.h Wed Aug 03 22:29:40 2011 +0000
+++ b/ffsformat.h Sun Apr 05 10:04:44 2015 +0000
@@ -24,11 +24,6 @@
Only the first 8 bytes are used and the NULL terminator discarded. */
#define FILE_SYSTEM_SIGNATURE "FFileSys"
-/* The size of the FLASH on the device to search through for the file
- system signature. */
-#define FILE_SYSTEM_FLASH_SIZE (512 * 1024)
-
-
/* Header stored at the beginning of the file system image. */
typedef struct _SFileSystemHeader
{