📄 mem_task.c
字号:
if (gl_mem_tick >= MEM_DELAY_TIME)
{ /* go to transfer state */
func_state = mmc_setup_card(MMC_CARD2);
if (func_state == MMC_ERROR)
{
mem_state = MEM_MMC2_ERROR;
}
else
{
if (func_state == MMC_END) /* end of execution */
{
gl_memory = MEM_MMC;
if (File_mount() == OK) /* mount file system */
{
mem_state = MEM_MMC2_IDLE;
}
else
{
mem_state = MEM_MMC2_ERR_FMT; /* memory not formatted */
}
print_mem(SYMB_MMC2); /* print MMC2 symbol */
}
gl_mem_tick = MEM_FUNCT_TIME; /* init delay timer */
}
}
break;
}
case MEM_MMC2_IDLE:
{
break;
}
case MEM_MMC1_ERROR:
{
if (mem_force_mmc)
{
mem_state = MEM_MMC1_INIT;
}
else
{
Mmc_disable();
mem_state = MEM_MMC2_INIT;
}
break;
}
case MEM_MMC2_ERROR:
{
if (mem_force_mmc)
{
mem_state = MEM_MMC2_INIT;
}
else
{
Mmc_disable();
mem_state = MEM_DF_INIT;
}
break;
}
case MEM_DF_ERR_FMT:
{
break;
}
case MEM_MMC1_ERR_FMT:
{
break;
}
case MEM_MMC2_ERR_FMT:
{
break;
}
}
}
/*F**************************************************************************
* NAME: mem_status
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
* memory status: MEM_BUSY: install in progress
* MEM_READY: install done
* MEM_FORMAT: install done but memory not formated
*----------------------------------------------------------------------------
* PURPOSE:
* Return memory status
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
Byte mem_status (void)
{
if ((mem_state == MEM_DF_IDLE) ||
(mem_state == MEM_MMC1_IDLE) ||
(mem_state == MEM_MMC2_IDLE))
{
return (MEM_READY);
}
if ((mem_state == MEM_DF_ERR_FMT) ||
(mem_state == MEM_MMC1_ERR_FMT) ||
(mem_state == MEM_MMC2_ERR_FMT))
{
return (MEM_FORMAT);
}
else
{
return (MEM_BUSY);
}
}
/*F**************************************************************************
* NAME: mem_check_card
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
* OK: card present or on-board memory
* KO: card not present
*----------------------------------------------------------------------------
* PURPOSE:
* Start card status checking
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
bit mem_check_card (void)
{
switch (mem_state)
{
case MEM_MMC1_IDLE:
case MEM_MMC1_ERR_FMT:
{
return (mmc_check_presence(MMC_CARD1));
}
case MEM_MMC2_IDLE:
case MEM_MMC2_ERR_FMT:
{
return (mmc_check_presence(MMC_CARD2));
}
default:
{
return OK;
}
}
}
/*F**************************************************************************
* NAME: mem_card_select
*----------------------------------------------------------------------------
* PARAMS:
* force: - TRUE: continue selecting MMC1 in case of error
* - FALSE: select next device in case of error
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Mass storage memory selection
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
* Call from mass storage routines:
* - when Test_Unit returns not ready
* - when exiting download mode for mounting new FAT
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void mem_card_select (bit force)
{
mem_force_mmc = force;
mem_state = MEM_MMC1_INIT;
}
/*F**************************************************************************
* NAME: mem_select_next
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Select next on-board or card memory
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void mem_select_next (void)
{
switch (mem_state)
{
case MEM_DF_IDLE:
case MEM_DF_ERR_FMT:
{
mem_state = MEM_MMC1_INIT;
break;
}
case MEM_MMC1_IDLE:
case MEM_MMC1_ERR_FMT:
{
mem_state = MEM_MMC2_INIT;
break;
}
case MEM_MMC2_IDLE:
case MEM_MMC2_ERR_FMT:
{
mem_state = MEM_DF_INIT;
break;
}
}
}
/*F**************************************************************************
* NAME: mem_select_format
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
* File system mount status
*----------------------------------------------------------------------------
* PURPOSE:
* Re-mount memory after format or mass storage update
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
bit mem_select_format (void)
{
gl_mem_tick = MEM_WRITE_TIME;
switch (mem_state)
{
case MEM_DF_ERR_FMT:
case MEM_DF_IDLE:
{
while (gl_mem_tick != MEM_TIME_OUT)
{
if (File_mount() == OK) /* check if format ok */
{
mem_state = MEM_DF_IDLE;
return OK;
}
}
return KO;
}
case MEM_MMC1_ERR_FMT:
case MEM_MMC1_IDLE:
{
while (gl_mem_tick != MEM_TIME_OUT)
{
if (File_mount() == OK) /* check if format ok */
{
mem_state = MEM_MMC1_IDLE;
return OK;
}
}
return KO;
}
case MEM_MMC2_ERR_FMT:
case MEM_MMC2_IDLE:
{
while (gl_mem_tick != MEM_TIME_OUT)
{
if (File_mount() == OK) /* check if format ok */
{
mem_state = MEM_MMC2_IDLE;
return OK;
}
}
return KO;
}
default:
{
return KO;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -