FreeRTOS下开启fatfs文件重入功能后,“Error:..\..\FreeRTOS\src\queue.c,1248“报错问题解决

默认FF_FS_REENTRANT =1

等待时长影响软件定时器功能,消除此问题:

方法一、FreeRTOSconfig.h文件中,关闭软件定时器  configUSE_TIMERS == 0ffconfig.h文件中 _FS_TIMEOUT可以不为0

方法二、configUSE_TIMERS == 1开启软件定时器时,ffconfig.h文件中 设置_FS_TIMEOUT=0

后面内容可以不用看

项目中遇到fatfs开启文件重入功能后,串口打印出现freertos报错信息

通过错误信息可知错误位置,打开文件找到具体代码
是个条件判断,是在系统开启任务调度运行后,或者使能了FreeRTOS的软件定时器
判断 调度挂起并且任务等待时长不等于零,如果不等于则进行信息打印
项目中freertos配置中,使能了软件定时器,则问题出在xTicksToWait系统等待时间上,错误问题仅出现在fatfs开启文件重入功能后即FF_FS_REENTRANT =1
开启后则文件系统会调用fatfs为重入所做的文件互斥访问函数,与系统等待时间相关的仅为下面的函数。
#if _FS_REENTRANT
/* This function is called on entering file functions to lock the volume.
/  When a FALSE is returned, the file function fails with FR_TIMEOUT.
*/
int ff_req_grant ( /* TRUE:Got a grant to access the volume, FALSE:Could not get a grant */
_SYNC_t sobj /* Sync object to wait */
)
{
int ret;
ret = (int)(xSemaphoreTake(sobj, _FS_TIMEOUT) == pdTRUE); /* FreeRTOS */
return ret;
}
即等待信号量的等待时间,我配置为_FS_TIMEOUT=10000,不为零,并且开启了软件定时器功能触发此错误
等待时长影响软件定时器功能,消除此问题:方法1.关闭软件定时器   方法2.设置_FS_TIMEOUT=0
更改后,开启文件重入功能,并进行文件读写不再进行错误提示

猜你喜欢

转载自blog.csdn.net/weixin_42634914/article/details/109402645
今日推荐