FLASH_DRV_CommandSequence需要在ram中运行,故应如图所示,增加标识符
START_FUNCTION_DECLARATION_RAMSECTION
END_FUNCTION_DECLARATION_RAMSECTION
START_FUNCTION_DEFINITION_RAMSECTION
END_FUNCTION_DEFINITION_RAMSECTION
START_FUNCTION_DECLARATION_RAMSECTION
static status_t FLASH_DRV_CommandSequence(const flash_ssd_config_t * pSSDConfig)
END_FUNCTION_DECLARATION_RAMSECTION
START_FUNCTION_DEFINITION_RAMSECTION
static status_t FLASH_DRV_CommandSequence(const flash_ssd_config_t * pSSDConfig)
{
status_t ret = STATUS_SUCCESS; /* Return code variable */
/* Clear CCIF to launch command */
FTFx_FSTAT |= FTFx_FSTAT_CCIF_MASK;
while (0U == (FTFx_FSTAT & FTFx_FSTAT_CCIF_MASK))
{
/* Wait till CCIF bit is set
* Serve callback function as often as possible
*/
if (NULL_CALLBACK != pSSDConfig->CallBack)
{
/* Temporarily disable compiler's check for ROM access call from within a ram function.
* The use of a function pointer type makes this check irrelevant.
* Nevertheless, it is imperative that the user-provided callback be defined in RAMSECTION */
DISABLE_CHECK_RAMSECTION_FUNCTION_CALL
(pSSDConfig->CallBack)();
ENABLE_CHECK_RAMSECTION_FUNCTION_CALL
}
}
/* Check if an error is occurred */
if ((FTFx_FSTAT & (FTFx_FSTAT_MGSTAT0_MASK | FTFx_FSTAT_FPVIOL_MASK | FTFx_FSTAT_ACCERR_MASK | FTFx_FSTAT_RDCOLERR_MASK)) != 0U)
{
ret = STATUS_ERROR;
}
return ret;
}
END_FUNCTION_DEFINITION_RAMSECTION
进行flashdriver下载后,对应hex文件除驱动函数外,还应包括每个驱动函数对应偏移量,如
0x05 0x00 0x00 0x00 ......(驱动函数) 偏移量为0x05(0x04 +1)的原因待查