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
更改后,开启文件重入功能,并进行文件读写不再进行错误提示
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值