写多个文件的两种方式,速度相差4倍!! - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4665|回复: 5
打印 上一主题 下一主题

写多个文件的两种方式,速度相差4倍!!

[复制链接]

24

主题

125

帖子

1466

积分

金牌会员

Rank: 6Rank: 6

积分
1466
跳转到指定楼层
楼主
发表于 2016-4-14 13:50:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用以下两种方式,分别向3个文件写入80M字节。方式1:循环向3个文件写8k字节数据,直到写满80M字节。
        i = 10240;
        while (i--) {
                res = f_write(&pfile, &buf_temp, 8192, &fwrite_cnt);
                if (FR_OK != res)  break;
                res = f_write(&pfile2, &buf_temp, 8192, &fwrite_cnt);
                if (FR_OK != res)  break;
                res = f_write(&pfile3, &buf_temp, 8192, &fwrite_cnt);
                if (FR_OK != res)  break;
        }
方式2:每次写8k字节,写完80M字节到1个文件,再写另一个文件。
        i = 10240;
        while (i--) {
                res = f_write(&pfile, &buf_temp, 8192, &fwrite_cnt);
                if (FR_OK != res)  break;
        }
        i = 10240;
        while (i--) {
                res = f_write(&pfile2, &buf_temp, 8192, &fwrite_cnt);
                if (FR_OK != res)  break;
        }
        i = 10240;
        while (i--) {
                res = f_write(&pfile3, &buf_temp, 8192, &fwrite_cnt);
                if (FR_OK != res)  break;
        }



方式1耗时约4分55秒,即295秒,方式2耗时约60秒。耗时比例约为5:1。

我所做项目是多通道录音设备,当前采用的是方式1写各个通道的数据到不同文件,由于写入速度限制,无法达到要求的最高采样率。
请问怎么才能解决这个矛盾?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2016-4-15 18:08:04 | 只看该作者
这个优化起来恐怕难度比较大 也需要比较成时间~
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
板凳
发表于 2016-4-15 18:08:56 | 只看该作者
建议你考虑使用 OMAPL138
数据读写的任务交给 ARM 释放 DSP 资源 这样可以提高性能
回复 支持 反对

使用道具 举报

24

主题

125

帖子

1466

积分

金牌会员

Rank: 6Rank: 6

积分
1466
地板
 楼主| 发表于 2016-4-15 18:35:58 | 只看该作者
希望缄默 发表于 2016-4-15 18:08
建议你考虑使用 OMAPL138
数据读写的任务交给 ARM 释放 DSP 资源 这样可以提高性能 ...

嗯,这个可以考虑。
但是我们这边没人会OMAP138的ARM端开发。

我现在打算改变程序结构,每个文件的写操作用一个任务来管理。
目前测试了,使用3个任务各写1个80M字节的文件,结构类似于方式1,但是写入的时间缩短为120秒左右。
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
5#
发表于 2016-4-15 22:05:46 来自手机 | 只看该作者
呃..... 我觉得也可以 先缓存在 DDR2 等系统空闲了 在统一写 不过这个也跟具体需求有关
回复 支持 反对

使用道具 举报

24

主题

125

帖子

1466

积分

金牌会员

Rank: 6Rank: 6

积分
1466
6#
 楼主| 发表于 2016-4-19 11:32:02 | 只看该作者
希望缄默 发表于 2016-4-15 22:05
呃..... 我觉得也可以 先缓存在 DDR2 等系统空闲了 在统一写 不过这个也跟具体需求有关 ...

嗯,环形缓冲队列是必须的。

我现在用5个任务分别写5个文件,当提高f_write单次写入的数据块大小时,可以明显提高文件写入速度。
比如,我做的项目是录音设备,f_write单次写入8k数据时,写入速度跟不上数据产生的速度;改为单次写入32k时,就可以解决这个问题了。

不知道你有没有这样的经验呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-6-16 03:26 , Processed in 0.037680 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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