From 5eb7f36a5e89ea210bc0563844de487b4c359932 Mon Sep 17 00:00:00 2001 From: L-diy Date: Wed, 15 Nov 2023 21:08:30 +0100 Subject: [PATCH 1/6] Add instructions for the external loader --- README.md | 5 +++++ docs/img/ext_loader_step_1.png | Bin 0 -> 13361 bytes docs/img/ext_loader_step_2.png | Bin 0 -> 78222 bytes docs/llfs.md | 13 +++++++++++++ 4 files changed, 18 insertions(+) create mode 100644 docs/img/ext_loader_step_1.png create mode 100644 docs/img/ext_loader_step_2.png diff --git a/README.md b/README.md index e4f90fb..097302d 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ - [Style Guide](#style-guide) - [Editor Configuration](#editor-configuration) - [Commit Messages Conventions](#commit-messages-conventions) + - [Writing File System Data to QSPI Flash](#writing-file-system-data-to-qspi-flash) - [Documentation](#documentation) ## Used Libs, Compiler and Apps @@ -52,6 +53,10 @@ Implement access right management The body of a commit message may be used to explain the what and why of a commit. +## Writing File System Data to QSPI Flash +Please read the [llfs.md](./docs/llfs.md#enabling-the-external-loader-in-stm32cubeide) document for instructions +on how to enable the external loader in STM32CubeIDE. + ## Documentation Documentation is placed in the [docs](docs) folder. If your part needs documentation (e.g. how to use tcp cmd interface), add a markdown file in the above-mentioned folder. diff --git a/docs/img/ext_loader_step_1.png b/docs/img/ext_loader_step_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b4454ad49d44d13043b470a7a893974c7ad27a22 GIT binary patch literal 13361 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 V4#R{FE&srOGLniC6=KGL{|~Cgk~9DS literal 0 HcmV?d00001 diff --git a/docs/llfs.md b/docs/llfs.md index 2fa6986..3a63df3 100644 --- a/docs/llfs.md +++ b/docs/llfs.md @@ -24,6 +24,7 @@ restricting operations solely to read functions. - [Reading a file](#reading-a-file) - [Getting the number of files](#getting-the-number-of-files) - [Using the POSIX file functions](#using-the-posix-file-functions) + - [Enabling the external loader in STM32CubeIDE](#enabling-the-external-loader-in-stm32cubeide) ## Initialization Before using the llfs API, or the file related POSIX (fopen, fgetc, ...) functions, the filesystem must be initialized by calling `llfs_init()`. @@ -161,3 +162,15 @@ The following functions are tested and working, but other functions might also w - `rewind` - `fstat` - `fileno` + +## Enabling the external loader in STM32CubeIDE +In order to write the file system data to the QSPI flash, the external loader must be enabled in STM32CubeIDE. +This can be done by opening the debug configuration: +![](img\ext_loader_step_1.png) + +Then, in the `Debugger` tab: +3. Enable the `External Loader` +4. Click the `Scan` button +5. Select the correct loader: `N25Q128A_STM32F746G-DISCO, 0x90000000 ...` + +![](img\ext_loader_step_2.png) From 96bc57fc3c8125f9d52ec88ed5700db82c141b2f Mon Sep 17 00:00:00 2001 From: L-diy Date: Wed, 15 Nov 2023 21:09:24 +0100 Subject: [PATCH 2/6] Fix some minor bugs in llfs --- project/Core/Src/llfs.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/project/Core/Src/llfs.c b/project/Core/Src/llfs.c index 62588de..31e1f1c 100644 --- a/project/Core/Src/llfs.c +++ b/project/Core/Src/llfs.c @@ -10,8 +10,8 @@ #include #include #define LOGGER_LEVEL_WARN -#include "llfs.h" #include "log.h" +#include "llfs.h" /** * @brief The maximum number of files that can be opened concurrently using the POSIX API @@ -20,8 +20,8 @@ extern struct llfs_data_file* llfs_root; const char* TAG = "llfs"; -size_t file_count = 0; -FILE* file_table[POSIX_MAX_FILES]; +static size_t file_count = 0; // Cache for the number of files in the filesystem +static FILE* file_table[POSIX_MAX_FILES]; static int new_file_table_entry(void); static int free_file_table_entry(int file_id); @@ -57,7 +57,7 @@ size_t llfs_file_list(llfs_file_t* file_list, size_t max_files, char* filter) { } // Iterate over all files in the filesystem - while (file != NULL && file_count < max_files) { + while (file != NULL && count < max_files) { // Filter out files with a filename that does not match the filter if (filter != NULL) { if (!file_ext_cmp(file->name, filter)) { @@ -218,7 +218,7 @@ int _close(int file_id) { * @param len * @return */ -int _read(int file_id, char* ptr, int len) { +size_t _read(int file_id, char* ptr, int len) { FILE* stream; llfs_file_t* llfs_file; size_t bytes_read; @@ -256,7 +256,7 @@ int _read(int file_id, char* ptr, int len) { memcpy(ptr, llfs_file->data + stream->_offset, bytes_read); stream->_offset += (off_t)bytes_read; - return (int)bytes_read; + return bytes_read; } /** @@ -281,7 +281,7 @@ int isatty(int file) { * @param dir * @return */ -int _lseek(int file, int ptr, int dir) { +off_t _lseek(int file, int ptr, int dir) { FILE* stream; if (file == STDIN_FILENO || file == STDOUT_FILENO || file == STDERR_FILENO) { @@ -310,7 +310,7 @@ int _lseek(int file, int ptr, int dir) { return -1; } - return 0; + return stream->_offset; } /** @@ -409,8 +409,6 @@ static FILE* file_id_to_stream(int file_id) { return file_table[file_id]; } - - /** * @brief Check if a filename ends with a given extension * From b2b5076af1655f59124652ee844a35483df5dfc6 Mon Sep 17 00:00:00 2001 From: L-diy Date: Thu, 16 Nov 2023 16:03:36 +0100 Subject: [PATCH 3/6] Fix zero file bug in mkllfs --- mkllfs/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mkllfs/main.c b/mkllfs/main.c index 6c21641..fd11f8c 100644 --- a/mkllfs/main.c +++ b/mkllfs/main.c @@ -1,7 +1,7 @@ /** * @file main.c * @brief Converts files to a C file that can be used by llfs (linked list file system). - * @version 0.2.0 + * @version 0.2.1 * @author Lorenz C. */ @@ -10,7 +10,7 @@ #include #include "tinydir.h" -#define VERSION "0.2.0" +#define VERSION "0.2.1" #define LLFS_VERSION "0.1.1" #define MAX_PATH_LEN 256 @@ -125,7 +125,7 @@ int main(int argc, char** argv) { // Make the last file the root file of the llfs fprintf(out_file, "\n"); - fprintf(out_file, "const struct llfs_data_file *llfs_root = &%s;\n", prev_llfs_name); + fprintf(out_file, "const struct llfs_data_file *llfs_root =%s%s;\n", (strcmp(prev_llfs_name, "NULL") == 0 ? " " : " &"), prev_llfs_name); // Print the number of files printf("Successfully converted %d files.\r\n", file_count); From b051e12c20a77d1b31a35c04a9767a954b635e0b Mon Sep 17 00:00:00 2001 From: L-diy Date: Thu, 16 Nov 2023 16:13:22 +0100 Subject: [PATCH 4/6] Calculate and cache the file count during llfs init --- project/Core/Src/llfs.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/project/Core/Src/llfs.c b/project/Core/Src/llfs.c index 31e1f1c..818051f 100644 --- a/project/Core/Src/llfs.c +++ b/project/Core/Src/llfs.c @@ -41,6 +41,14 @@ int8_t llfs_init(void) { file_table[STDOUT_FILENO] = stdout; file_table[STDERR_FILENO] = stderr; + // Calculate the number of files in the filesystem and cache it + const struct llfs_data_file* file = llfs_root; + file_count = 0; + while (file != NULL) { + file_count++; + file = file->next; + } + return 0; } @@ -130,13 +138,6 @@ llfs_file_t* llfs_next_file(void** mem, char* filter) { } size_t llfs_file_count(void) { - if (file_count == 0) { - const struct llfs_data_file* file = llfs_root; - while (file != NULL) { - file_count++; - file = file->next; - } - } return file_count; } From f6aeeeb393d55a358532618cf7d4f0c1e9d16fc5 Mon Sep 17 00:00:00 2001 From: L-diy Date: Thu, 16 Nov 2023 17:44:25 +0100 Subject: [PATCH 5/6] Update mkllfs.md with new release url --- docs/mkllfs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/mkllfs.md b/docs/mkllfs.md index 1e6ed8c..7f44724 100644 --- a/docs/mkllfs.md +++ b/docs/mkllfs.md @@ -7,7 +7,7 @@ The llfs filesystem is a flat filesystem, meaning that it does not support direc The mkllfs utilit can be used to generate the `llfs_data.c` file. The `llfs_data.c` file from a directory with files. -A pre-compiled version can be download: [mkllfs.exe](https://github.com/Sani7/2023-Webservices_And_Applications/releases/tag/v0.2.0) +A pre-compiled version can be download: [mkllfs.exe](https://github.com/Sani7/2023-Webservices_And_Applications/releases/tag/v0.2.1) ## Usage The mkllfs utility can be used as follows: From fe430fdda26c54e8d64f3a91da00d726a38336f0 Mon Sep 17 00:00:00 2001 From: L-diy <25403682+ldiy@users.noreply.github.com> Date: Thu, 16 Nov 2023 19:24:05 +0100 Subject: [PATCH 6/6] Fix img urls in llfs.md --- docs/llfs.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/llfs.md b/docs/llfs.md index 3a63df3..38f4a7b 100644 --- a/docs/llfs.md +++ b/docs/llfs.md @@ -166,11 +166,12 @@ The following functions are tested and working, but other functions might also w ## Enabling the external loader in STM32CubeIDE In order to write the file system data to the QSPI flash, the external loader must be enabled in STM32CubeIDE. This can be done by opening the debug configuration: -![](img\ext_loader_step_1.png) + +![screenshot of step 1](img/ext_loader_step_1.png) Then, in the `Debugger` tab: 3. Enable the `External Loader` 4. Click the `Scan` button 5. Select the correct loader: `N25Q128A_STM32F746G-DISCO, 0x90000000 ...` -![](img\ext_loader_step_2.png) +![screenshot of step 2](img/ext_loader_step_2.png)