修复RTOS存储文件死机问题

This commit is contained in:
sober.song 2023-12-30 18:53:53 +08:00
parent 50ad347fc8
commit 72c115a00b
8 changed files with 100 additions and 74 deletions

View File

@ -332,9 +332,8 @@ static void* mmc_monitoring_thread(void *arg)
{
while(MMCMonitorTskCfg.IsRun)
{
#if USE_MMC_DEV_CHECK
pMMCDev = SF_StrgCheckWorkableDev();
#endif
sf_sleep_ms(1000);
}
return NULL;

View File

@ -90,7 +90,7 @@ static void card_insert_job2(void)
int ret;
FILE_TSK_INIT_PARAM Param = {0};
FS_HANDLE StrgDXH2;
UINT32 start_sector = 8192 ; /* linux cmd fdisk can list partition info */
UINT32 start_sector = 16 ; /* linux cmd fdisk can list partition info */
UINT32 totoal_sectors = 0;
StrgDXH2 = (FS_HANDLE)sdio2_getStorageObject(STRG_OBJ_FAT1);
STORAGE_OBJ* pStrg = sdio2_getStorageObject(STRG_OBJ_FAT1);
@ -146,9 +146,6 @@ static void sys_detect_card_task(void)
#if defined(_EMBMEM_EMMC_)
THREAD_ENTRY();
#if USE_RTOS_MMC_CHECK
SF_RtosStrgInit();
#endif
card_insert_job();
THREAD_RETURN(0);
@ -181,9 +178,9 @@ static void sys_detect_card_task(void)
vTaskDelay(pdMS_TO_TICKS(1000));
}
#if USE_RTOS_MMC_CHECK
SF_RtosStrgUnInit();
#endif
//#if USE_RTOS_MMC_CHECK
//SF_RtosStrgUnInit();
//#endif
THREAD_RETURN(0);
#endif
}
@ -232,6 +229,11 @@ void filesys_init(void)
vos_task_resume(task_hdl2);
}
#endif
#if USE_RTOS_MMC_CHECK
SF_RtosStrgInit();
#endif
#if 0
if (FST_STA_OK != FileSys_Init(FileSys_GetOPS_uITRON())) {
@ -317,4 +319,4 @@ void sf_log_open(void)
#endif
}
#endif
#endif

View File

@ -866,17 +866,25 @@ static DCF_HANDLE MovieFast_Get_DCF_Handle(void)
//#else
//return g_dcf_hdl;
//#endif
SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl);
SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl2);
#if USE_RTOS_MMC_CHECK
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
if(mmc_dev ==NULL)
{
DBG_ERR("No MMC_Dev Can use!\n");
return -1;
}
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("dcf_handle err\n");
return -1;
}
DBG_WRN("Moviefast DCF_GET_HANDLE, %d\n", mmc_dev->dcf_handle);
return mmc_dev->dcf_handle;
#else
return g_dcf_hdl;
return g_dcf_hdl2;
#endif
}
INT32 MovieFast_Wait_FileSys(UINT32 timeout_ms)
@ -1179,9 +1187,12 @@ static void MovieFast_UserEventCb(UINT32 id, MOVIE_USER_CB_EVENT event_id, UINT3
#if HUNTING_CAMERA_MCU == ENABLE
#if USE_RTOS_MMC_CHECK
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
if(mmc_dev != NULL)
{
DBG_ERR("No MMC_Dev Can use!\n");
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("dcf_handle err\n");
}
}
else
{
@ -1195,7 +1206,7 @@ static void MovieFast_UserEventCb(UINT32 id, MOVIE_USER_CB_EVENT event_id, UINT3
}
}
#else
snprintf(tmp, sizeof(tmp), "%c%s%s", 'A', MOVIE_THUMB_PATH, thumb_current_path); /* DCF 8.3 naming rule */
snprintf(tmp, sizeof(tmp), "%c%s%s", 'B', MOVIE_THUMB_PATH, thumb_current_path); /* DCF 8.3 naming rule */
#endif
#else
snprintf(tmp, sizeof(tmp), "%s%s", MOVIE_THUMB_PATH, (thumb_current_path + (length - 12))); /* DCF 8.3 naming rule */
@ -1310,7 +1321,7 @@ THREAD_RETTYPE MovieFast_InitFileNamingThread(void *arg)
#endif
{
#if USE_RTOS_MMC_CHECK
SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl);
//SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl);
#endif
fastboot_set_done(BOOT_INIT_FILENAMINGOK);
}
@ -1353,7 +1364,7 @@ THREAD_RETTYPE MovieFast_InitFileNamingThread2(void *arg)
#endif
{
#if USE_RTOS_MMC_CHECK
SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl2);
//SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl2);
#endif
fastboot_set_done(BOOT_INIT_FILENAMINGOK_2);
}

View File

@ -624,19 +624,25 @@ UINT32 PhotoExe_GetFreePicNum(void)
UINT32 CaptureSize;
UINT32 size;
#if USE_RTOS_MMC_CHECK
#if 0//USE_RTOS_MMC_CHECK
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
if(mmc_dev ==NULL)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
return 0;
}
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("dcf_handle err\n");
return 0;
}
#endif
#if (FILESIZE_ALIGN_FUNC)
reserveSize += FS_ALIGN_RESERVED_SIZE;
#endif
#if USE_RTOS_MMC_CHECK
#if 0//USE_RTOS_MMC_CHECK
if(mmc_dev->dev_type == MMC_DEV_SD)
{

View File

@ -58,14 +58,20 @@ void UIStorageCheck_ResetFileReachMax(void)
static BOOL check_CurrDir_writable(void)
{
#if USE_RTOS_MMC_CHECK
#if 0//USE_RTOS_MMC_CHECK
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
if(mmc_dev ==NULL)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("dcf_handle err\n");
return FALSE;
}
#endif
UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB);
@ -76,7 +82,7 @@ static BOOL check_CurrDir_writable(void)
#if (USE_DCF == ENABLE)
UINT32 CurrDirID;
SDCFDIRINFO dirinfo = {0};
#if USE_RTOS_MMC_CHECK
#if 0//USE_RTOS_MMC_CHECK
CurrDirID = DCF_GetDBInfoEx(mmc_dev->dcf_handle, DCF_INFO_CUR_DIR_ID);
if (CurrDirID) {
if (DCF_GetDirInfoEx(mmc_dev->dcf_handle, CurrDirID, &dirinfo)) {
@ -108,14 +114,20 @@ static BOOL check_CurrDir_writable(void)
BOOL UIStorageCheck_DCIMWritable(void)
{
#if USE_RTOS_MMC_CHECK
#if 0//USE_RTOS_MMC_CHECK
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
if(mmc_dev ==NULL)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("dcf_handle err\n");
return FALSE;
}
#endif
UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB);
@ -125,7 +137,7 @@ BOOL UIStorageCheck_DCIMWritable(void)
INT32 uiStatus = 0;
UINT8 ucAttrib = 0;
BOOL ret = FALSE;
#if USE_RTOS_MMC_CHECK
#if 0//USE_RTOS_MMC_CHECK
if(mmc_dev->dev_type == MMC_DEV_SD)
{
uiStatus = FileSys_GetAttrib("A:\\DCIM", &ucAttrib);
@ -175,7 +187,7 @@ static BOOL UIStrgCheckFolderFull(DCF_HANDLE DcfHandle)
return TRUE;
}
bIsFileReachMax = FALSE;
#if USE_RTOS_MMC_CHECK
#if 0//USE_RTOS_MMC_CHECK
ret = DCF_GetNextIDEx(DcfHandle, &DCF_DirId, &DCF_FileId);
#else
ret = DCF_GetNextID(&DCF_DirId, &DCF_FileId);
@ -216,7 +228,7 @@ static BOOL UIStrgCheckFull(UINT32 *pFreeCount)
static BOOL UIStrgCheckErr(MMC_DEV_TYPE dev_id)
{
#if USE_RTOS_MMC_CHECK
#if 0//USE_RTOS_MMC_CHECK
if(dev_id == MMC_DEV_SD)
{
@ -247,14 +259,20 @@ static BOOL UIStrgCheckErr(MMC_DEV_TYPE dev_id)
BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
{
#if USE_RTOS_MMC_CHECK
#if 0//USE_RTOS_MMC_CHECK
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
if(mmc_dev ==NULL)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("dcf_handle err\n");
return FALSE;
}
#endif
UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB);
@ -266,7 +284,7 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
if (useFileDB) {
return FALSE;
} else {
#if USE_RTOS_MMC_CHECK
#if 0//USE_RTOS_MMC_CHECK
UIStrgCheckFolderFull(mmc_dev->dcf_handle);
#else
UIStrgCheckFolderFull(0);
@ -286,7 +304,7 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
break;
case STORAGE_CHECK_ERROR:
#if USE_RTOS_MMC_CHECK
#if 0//USE_RTOS_MMC_CHECK
UIStrgCheckErr(mmc_dev->dev_type);
#else
UIStrgCheckErr(0);

View File

@ -748,7 +748,7 @@ INT32 PhotoFast_FileNaming_Open(void)
DCF_ScanObjEx(g_dcf_hdl);
#if USE_RTOS_MMC_CHECK
SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl);
//SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl);
#endif
}
else{
@ -780,7 +780,7 @@ INT32 PhotoFast_FileNaming_Open2(void)
DBG_WRN("DCF_ScanObjEx emmc handle=%d\n", g_dcf_hdl2);
DCF_ScanObjEx(g_dcf_hdl2);
#if USE_RTOS_MMC_CHECK
SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl2);
//SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl2);
#endif
}
else{
@ -812,8 +812,8 @@ INT32 PhotoFast_FileNaming_Close(void)
}
#if USE_RTOS_MMC_CHECK
SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl);
SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl2);
//SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl);
//SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl2);
#endif
return 0;
}
@ -936,17 +936,26 @@ DCF_HANDLE PhotoFast_Get_DCF_Handle()
//#else
//return g_dcf_hdl;
//#endif
SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl);
SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl2);
#if USE_RTOS_MMC_CHECK
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
if(mmc_dev ==NULL)
{
DBG_ERR("No MMC_Dev Can use!\n");
return -1;
}
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("dcf_handle err\n");
return -1;
}
DBG_WRN("photofast DCF_GET_HANDLE, %d\n", mmc_dev->dcf_handle);
return mmc_dev->dcf_handle;
#else
return g_dcf_hdl;
return g_dcf_hdl2;
#endif
}
INT32 PhotoFast_Wait_FileSys(UINT32 timeout_ms)

View File

@ -2248,7 +2248,7 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data)
if(param->cnt >= param->max_cnt)
break;
#if SF_NO_SD_SEND == ENABLE
if(PhotoFast_Wait_FileSys(FASTBOOT_WAIT_FILESYS_TIMEOUT_MS) != E_OK){
if(PhotoFast_Wait_FileSys(1) != E_OK){
goto EXIT;
}
#endif
@ -2391,9 +2391,12 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data)
#if HUNTING_CAMERA_MCU == ENABLE
#if USE_RTOS_MMC_CHECK
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
if(mmc_dev != NULL)
{
DBG_ERR("No MMC_Dev Can use!\n");
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("dcf_handle err\n");
}
}
else
{
@ -2407,7 +2410,7 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data)
}
}
#else
snprintf(tmp, sizeof(tmp), "%c%s%s", 'A', PHOTO_THUMB_PATH, file_path); /* DCF 8.3 naming rule */
snprintf(tmp, sizeof(tmp), "%c%s%s", 'B', PHOTO_THUMB_PATH, file_path); /* DCF 8.3 naming rule */
#endif
#else
UINT32 length = strlen(file_path);

View File

@ -176,7 +176,7 @@ static UINT32 sf_rtos_mmc_dev_space_check_full(MMC_DEV_TYPE mmc_dev)
IsCardFull = FALSE;
ret = 0;
}
DBG_WRN("[%d]sd card diskFree=%lluM, ret = %d\n", __LINE__, diskFree, ret);
DBG_WRN("[strg_id:%d]diskFree=%lluM, ret = %d\n", mmc_dev, diskFree, ret);
return ret;
}
@ -214,27 +214,6 @@ SF_RTOS_ST_MMC_DEV *SF_RtosStrgCheckWorkableDev(void)
{
MMC_DEV_TYPE workable_dev = MMC_DEV_NO;
UINT32 isfull = 0;
isfull = sf_rtos_mmc_dev_space_check_full(MMC_DEV_SD);
if(isfull == 1)
{
sf_rtos_mmc_dev[MMC_DEV_SD]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH;
}
else if(isfull == 0)
{
sf_rtos_mmc_dev[MMC_DEV_SD]->space_state = MMC_DEV_SPACE_STATE_ENOUGH;
}
isfull = sf_rtos_mmc_dev_space_check_full(MMC_DEV_EMMC);
if(isfull == 1)
{
sf_rtos_mmc_dev[MMC_DEV_EMMC]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH;
}
else if(isfull == 0)
{
sf_rtos_mmc_dev[MMC_DEV_EMMC]->space_state = MMC_DEV_SPACE_STATE_ENOUGH;
}
if((sf_rtos_mmc_dev[MMC_DEV_SD]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED) &&
(sf_rtos_mmc_dev[MMC_DEV_EMMC]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED))
{
@ -242,7 +221,7 @@ SF_RTOS_ST_MMC_DEV *SF_RtosStrgCheckWorkableDev(void)
}
else if(sf_rtos_mmc_dev[MMC_DEV_SD]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED)
{
if(sf_rtos_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
if(!sf_rtos_mmc_dev_space_check_full(MMC_DEV_EMMC))
{
workable_dev = MMC_DEV_EMMC;
}
@ -256,7 +235,7 @@ SF_RTOS_ST_MMC_DEV *SF_RtosStrgCheckWorkableDev(void)
}
else if(sf_rtos_mmc_dev[MMC_DEV_EMMC]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED)
{
if(sf_rtos_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
if(!sf_rtos_mmc_dev_space_check_full(MMC_DEV_SD))
{
workable_dev = MMC_DEV_SD;
}
@ -270,16 +249,16 @@ SF_RTOS_ST_MMC_DEV *SF_RtosStrgCheckWorkableDev(void)
}
else
{
if(sf_rtos_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH &&
sf_rtos_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
if(!sf_rtos_mmc_dev_space_check_full(MMC_DEV_EMMC) &&
!sf_rtos_mmc_dev_space_check_full(MMC_DEV_SD))
{
workable_dev = MMC_DEV_EMMC;
}
else if(sf_rtos_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
else if(!sf_rtos_mmc_dev_space_check_full(MMC_DEV_EMMC))
{
workable_dev = MMC_DEV_EMMC;
}
else if(sf_rtos_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
else if(!sf_rtos_mmc_dev_space_check_full(MMC_DEV_SD))
{
workable_dev = MMC_DEV_SD;
}
@ -297,12 +276,11 @@ SF_RTOS_ST_MMC_DEV *SF_RtosStrgCheckWorkableDev(void)
for(int i = 0; i < 2; i++)
{
sf_rtos_mmc_dev[i]->dev_type = workable_dev;
DBG_WRN("mount:%d, space:%d\n", sf_rtos_mmc_dev[i]->moumted_state,
sf_rtos_mmc_dev[i]->space_state);
DBG_WRN("mount:%d\n", sf_rtos_mmc_dev[i]->moumted_state);
}
if(workable_dev == MMC_DEV_NO)
{
return sf_rtos_mmc_dev[MMC_DEV_EMMC];
return NULL;
}
else
{