OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5300|回复: 1

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

[复制链接]

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2019-6-12
在线时间
26 小时
发表于 2020-10-31 14:54:36 | 显示全部楼层 |阅读模式
默认FF_FS_REENTRANT =1
等待时长影响软件定时器功能,消除此问题:一.  FreeRTOSconfig.h文件中,关闭软件定时器  configUSE_TIMERS == 0ffconfig.h文件中 _FS_TIMEOUT可以不为0
                                                                二、configUSE_TIMERS == 1开启软件定时器时,ffconfig.h文件中 设置_FS_TIMEOUT=0
后面内容可以不用看
项目中遇到fatfs开启文件重入功能后,串口打印出现freertos报错信息
erro.png
通过错误信息可知错误位置,打开文件找到具体代码


是个条件判断,是在系统开启任务调度运行后,或者使能了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

更改后,开启文件重入功能,并进行文件读写不再进行错误提示



ok.png



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2020-5-14
在线时间
16 小时
发表于 2021-3-18 10:03:16 | 显示全部楼层
楼主,我最近在学这个地方,问您一个问题:
/* #include <somertos.h>        // O/S definitions */
#include "FreeRTOS.h"
#define FF_FS_REENTRANT        1
#define FF_FS_TIMEOUT        1000
#define FF_SYNC_t                HANDLE

上面的HANDLE在Free RTOS里应该修改成什么吗?我的项目工程会报错。在这个定义的地方。
错误信息是HANDLE is undefined
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表