diff options
author | David Crocker <dcrocker@eschertech.com> | 2020-12-16 19:08:16 +0300 |
---|---|---|
committer | David Crocker <dcrocker@eschertech.com> | 2020-12-16 19:08:16 +0300 |
commit | 95fcaa1d4264d7a11225b2450f8aee553c66f7d5 (patch) | |
tree | 42e0ab8dad2852b4882223e2947a9ea721de319d /src/Storage/MassStorage.cpp | |
parent | b546702e73667a4ca9c42d7a8ef2b2c1b65ef29f (diff) |
File write buffers moved to non-cached memory for SAME70
Diffstat (limited to 'src/Storage/MassStorage.cpp')
-rw-r--r-- | src/Storage/MassStorage.cpp | 24 |
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) |