Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rm_littlefs_flash: Add support for thread-safe on ThreadX #332

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions ra/fsp/inc/instances/rm_littlefs_flash.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,15 @@
#include "r_flash_api.h"
#include "lfs.h"
#if LFS_THREAD_SAFE
#include "FreeRTOS.h"
#include "semphr.h"

#if BSP_CFG_RTOS == 1 // ThreadX
#include "tx_api.h"
#elif BSP_CFG_RTOS == 2 // FreeRTOS
#include "FreeRTOS.h"
#include "semphr.h"
#endif
#endif


/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
FSP_HEADER

Expand Down Expand Up @@ -60,8 +64,12 @@ typedef struct st_rm_littlefs_flash_instance_ctrl
uint32_t open;
rm_littlefs_cfg_t const * p_cfg;
#if LFS_THREAD_SAFE
#if BSP_CFG_RTOS == 1 // ThreadX
TX_MUTEX mutex;
#elif BSP_CFG_RTOS == 2 // FreeRTOS
SemaphoreHandle_t xSemaphore;
StaticSemaphore_t xMutexBuffer;
#endif
#endif
} rm_littlefs_flash_instance_ctrl_t;

Expand Down
25 changes: 25 additions & 0 deletions ra/fsp/src/rm_littlefs_flash/rm_littlefs_flash.c
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,14 @@ fsp_err_t RM_LITTLEFS_FLASH_Open (rm_littlefs_ctrl_t * const p_ctrl, rm_littlefs
FSP_ERROR_RETURN(FSP_SUCCESS == err, err);

#if LFS_THREAD_SAFE
#if BSP_CFG_RTOS == 1 // ThreadX
if(tx_mutex_create(&p_instance_ctrl->mutex, "littlefs", TX_INHERIT) != TX_SUCCESS)
{
p_flash->p_api->close(p_flash->p_ctrl);

return FSP_ERR_INTERNAL;
}
#elif BSP_CFG_RTOS == 2 // FreeRTOS
p_instance_ctrl->xSemaphore = xSemaphoreCreateMutexStatic(&p_instance_ctrl->xMutexBuffer);

if (NULL == p_instance_ctrl->xSemaphore)
Expand All @@ -115,6 +123,7 @@ fsp_err_t RM_LITTLEFS_FLASH_Open (rm_littlefs_ctrl_t * const p_ctrl, rm_littlefs

return FSP_ERR_INTERNAL;
}
#endif
#endif

/* This module is now open. */
Expand Down Expand Up @@ -152,7 +161,11 @@ fsp_err_t RM_LITTLEFS_FLASH_Close (rm_littlefs_ctrl_t * const p_ctrl)
p_flash->p_api->close(p_extend->p_flash->p_ctrl);

#if LFS_THREAD_SAFE
#if BSP_CFG_RTOS == 1 // ThreadX
tx_mutex_delete(&p_instance_ctrl->mutex);
#elif BSP_CFG_RTOS == 2 // FreeRTOS
vSemaphoreDelete(p_instance_ctrl->xSemaphore);
#endif
#endif

return FSP_SUCCESS;
Expand Down Expand Up @@ -277,9 +290,15 @@ int rm_littlefs_flash_lock (const struct lfs_config * c)
FSP_ASSERT(NULL != p_instance_ctrl);
FSP_ERROR_RETURN(RM_LITTLEFS_FLASH_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN);
#endif
#if BSP_CFG_RTOS == 1 // ThreadX
UINT err = tx_mutex_get(&p_instance_ctrl->mutex, RM_LITTLEFS_FLASH_SEMAPHORE_TIMEOUT);

FSP_ERROR_RETURN(err == TX_SUCCESS, LFS_ERR_IO);
#elif BSP_CFG_RTOS == 2 // FreeRTOS
BaseType_t err = xSemaphoreTake(p_instance_ctrl->xSemaphore, RM_LITTLEFS_FLASH_SEMAPHORE_TIMEOUT);

FSP_ERROR_RETURN(true == err, LFS_ERR_IO);
#endif

return LFS_ERR_OK;
#else
Expand All @@ -303,9 +322,15 @@ int rm_littlefs_flash_unlock (const struct lfs_config * c)
FSP_ASSERT(NULL != p_instance_ctrl);
FSP_ERROR_RETURN(RM_LITTLEFS_FLASH_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN);
#endif
#if BSP_CFG_RTOS == 1 // ThreadX
UINT err = tx_mutex_put(&p_instance_ctrl->mutex);

FSP_ERROR_RETURN(err == TX_SUCCESS, LFS_ERR_IO);
#elif BSP_CFG_RTOS == 2 // FreeRTOS
BaseType_t err = xSemaphoreGive(p_instance_ctrl->xSemaphore);

FSP_ERROR_RETURN(true == err, LFS_ERR_IO);
#endif

return LFS_ERR_OK;
#else
Expand Down