Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Crocker <dcrocker@eschertech.com>2020-12-16 19:08:16 +0300
committerDavid Crocker <dcrocker@eschertech.com>2020-12-16 19:08:16 +0300
commit95fcaa1d4264d7a11225b2450f8aee553c66f7d5 (patch)
tree42e0ab8dad2852b4882223e2947a9ea721de319d /src/Storage/MassStorage.cpp
parentb546702e73667a4ca9c42d7a8ef2b2c1b65ef29f (diff)
File write buffers moved to non-cached memory for SAME70
Diffstat (limited to 'src/Storage/MassStorage.cpp')
-rw-r--r--src/Storage/MassStorage.cpp24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/Storage/MassStorage.cpp b/src/Storage/MassStorage.cpp
index dbfe0cf2..dbb8c7db 100644
--- a/src/Storage/MassStorage.cpp
+++ b/src/Storage/MassStorage.cpp
@@ -29,9 +29,10 @@ static_assert(SD_MMC_MEM_CNT == NumSdCards);
// Private data and methods
-#if SAME70
-alignas(4) static __nocache uint8_t sectorBuffers[512][NumSdCards];
-#endif
+# if SAME70
+alignas(4) static __nocache uint8_t sectorBuffers[NumSdCards][512];
+alignas(4) static __nocache char writeBufferStorage[NumFileWriteBuffers][FileWriteBufLen];
+# endif
enum class CardDetectState : uint8_t
{
@@ -121,6 +122,7 @@ static FileInfoParser infoParser;
static DIR findDir;
static FileWriteBuffer *freeWriteBuffers;
#endif
+
#if HAS_MASS_STORAGE || HAS_LINUX_INTERFACE
static Mutex fsMutex;
static FileStore files[MAX_FILES];
@@ -167,14 +169,14 @@ static FileStore files[MAX_FILES];
FileWriteBuffer *MassStorage::AllocateWriteBuffer() noexcept
{
MutexLocker lock(fsMutex);
- if (freeWriteBuffers == nullptr)
- {
- return nullptr;
- }
FileWriteBuffer * const buffer = freeWriteBuffers;
- freeWriteBuffers = buffer->Next();
- buffer->SetNext(nullptr);
+ if (buffer != nullptr)
+ {
+ freeWriteBuffers = buffer->Next();
+ buffer->SetNext(nullptr);
+ buffer->DataTaken(); // make sure that the write pointer is clear
+ }
return buffer;
}
@@ -271,7 +273,11 @@ void MassStorage::Init() noexcept
freeWriteBuffers = nullptr;
for (size_t i = 0; i < NumFileWriteBuffers; ++i)
{
+#if SAME70
+ freeWriteBuffers = new FileWriteBuffer(freeWriteBuffers, writeBufferStorage[i]);
+#else
freeWriteBuffers = new FileWriteBuffer(freeWriteBuffers);
+#endif
}
for (size_t card = 0; card < NumSdCards; ++card)