硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4553|回复: 7
收起左侧

[RL-FlashFS] 【已解决】发现FlashFS的部分函数不支持多任务调用,主要是fread和fwrite不支持

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106645
QQ
发表于 2016-2-19 01:10:11 | 显示全部楼层 |阅读模式
最近尝试在F429板子上面实现emWin的自带的视频播放,并加上声音输出,这个声音是从视频中提取出来的。并
独立成一个MP3格式文件,测试发现两个不同任务,同时调用fread会出现卡机现象,并不是死机。带进一步确定问题原因
手册上说这个函数是线程安全的。。


现在的解决办法是调用函数fread前后加上互斥操作。
===========================================
解决办法看4楼
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106645
QQ
 楼主| 发表于 2016-2-19 01:23:46 | 显示全部楼层
这两个任务都在等待互斥条件:
1.png
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2016-2-19 10:22:00 | 显示全部楼层
我想应该是支持多任务的吧  flashfs的文件io函数基本上都是c库重定向的 而c库文件io是支持多任务的  至于为何会卡 会不会是缓冲区设置太小的缘故
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106645
QQ
 楼主| 发表于 2016-2-19 12:42:52 | 显示全部楼层

回 myxiaonia 的帖子

myxiaonia:
我想应该是支持多任务的吧  flashfs的文件io函数基本上都是c库重定向的 而c库文件io是支持多任务的  至于为何会卡 会不会是缓冲区设置太小的缘故
谢谢回复。
经过测试发现,每创建一个任务,RTX都会为这个任务创建一个互斥信号量,估计是因为添加了FlashFS的缘故,测试发现任务数
跟创建的互斥信号量数是相同的。
1.png

通过这两个函数进行申请和释放:
5.png

进一步查找应该就是这里说的原因,标准库的多线程需要互斥信号量。
4.png



====================================
最终的解决办法是:加大启动代码里面的堆空间heap就可以解决了。
以前我是设置为了0x200,现在改成0x800,没问题了。标准库需要用到这些堆空间。


回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2016-2-19 15:57:37 | 显示全部楼层

回 eric2013 的帖子

eric2013:谢谢回复。
经过测试发现,每创建一个任务,RTX都会为这个任务创建一个互斥信号量,估计是因为添加了FlashFS的缘故,测试发现任务数
跟创建的互斥信号量数是相同的。

....... (2016-02-19 12:42)
不错不错  又解决一个问题

以前看过那个文件  也没细找  你找到了呵呵

还有你是通过修改堆解决问题的,看来那几个库函数会使用堆啊  我还以为是文件系统的缓冲区太小造成的
回复

使用道具 举报

58

主题

118

回帖

292

积分

高级会员

积分
292
发表于 2018-7-16 09:23:32 | 显示全部楼层
版主,FreeRTOS下,想要fread和fwrite支持多任务,是不是需要实现_mutex_initialize,_mutex_acquire,_mutex_release这三个函数?但从你的《基于RTX+emWin+FlashFS+USB+TCPnet+CAN+Modbus的综合Demo》中没看出这三个函数从哪引用,去掉这三个函数的定义,编译器也没报错。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106645
QQ
 楼主| 发表于 2018-7-16 09:24:52 | 显示全部楼层
yuanfp 发表于 2018-7-16 09:23
版主,FreeRTOS下,想要fread和fwrite支持多任务,是不是需要实现_mutex_initialize,_mutex_acquire,_mut ...

FreeRTOS下不支持FlashFS多任务,需要的话,只能你自己多研究下了
回复

使用道具 举报

58

主题

118

回帖

292

积分

高级会员

积分
292
发表于 2018-7-16 14:05:30 | 显示全部楼层
本帖最后由 yuanfp 于 2018-7-16 14:11 编辑
eric2013 发表于 2018-7-16 09:24
FreeRTOS下不支持FlashFS多任务,需要的话,只能你自己多研究下了

您有思路提供一下吗?我可以试验一下,然后贴在论坛里。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-27 16:55 , Processed in 0.182093 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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