|
|
前往: |
| FAT表压缩(利用FAT表的连贯性,压缩FAT表.实现MP3的快进和快退) |
| 发表人 | 内容 | |
|---|---|---|
| 2011/01/11 01:17 |
|
|
|
[楼主位] 正点原子
等级:
注册时间:![]() 2010/12/02 10:41 文章: 8097 来自: 湖南 在线 |
这两天在弄VS1053的mp3,VS1053可以支持所有格式的快进和快退,虽然VS1053很强大,但是如果单片机跟不上,那么其强大的优势就体现不出来.现在我的已经可以正常和快速播放各种VS1053支持的格式(MIDI未测).今天在弄VS1053的快进和快退,但是由于文件系统的链式结构的特殊性,实现向下访问很容易,但是如果要实现向上访问,那么久比较麻烦了.具体原因大家如果了解FAT结构就清楚了. 贴上现在在用的代码.已经移植到VS1053的MP3上,后续补充测试结果.现在正常播放没问题.证明前向访问是没有问题的. //cluster:文件的首簇 //读下一簇簇号 if(FAT32_Enable)offset = cluster/128;//FAT32的FAT表中,用四个字节表示一个簇地址.512/4=128 if(SD_ReadSingleBlock(sector,fat_buffer))return 0x0ffffff8;//读取FAT表,发生错误是返回0x0ffffff8 |
|
|
我的淘宝小店:http://shop62103354.taobao.com |
||
|
||
| 2011/01/11 02:14 |
|
|
[1楼] 张洋
等级:
注册时间:![]() 2010/12/14 10:47 文章: 337 来自: 广州 离线 |
支持原创!
|
|
|
希望openedv能给大家提供一个友好的技术交流平台! |
||
|
||
| 2011/02/09 17:43 |
|
|
|
[2楼] smy096
等级:
注册时间:![]() 2011/01/20 08:21 文章: 29 离线 |
看的头大,跟着原子哥你的手册链接过来的,FAT部分的程序号恶心呐~~~
|
|
|
||
| 2011/02/09 18:59 |
|
|
[3楼] 张洋
等级:
注册时间:![]() 2010/12/14 10:47 文章: 337 来自: 广州 离线 |
建议先看《FAT32简单教程》,我们光盘的“FAT资料”目录里面可以找到这个文档!
|
|
|
希望openedv能给大家提供一个友好的技术交流平台! |
||
|
||
| 2011/02/09 21:16 |
|
|
|
[4楼] smy096
等级:
注册时间:![]() 2011/01/20 08:21 文章: 29 离线 |
回复【3楼】 张洋 :
------------------------------- 哥,俺就是看完那个才感觉熟悉了FAT32结构才敢看原子哥的程序的,发现这个确实很难,原子哥定义了一堆结构,比如bootsector710,bpb710,partrecord,还有partsector等,俺就郁闷了,感觉好乱,光一个FAT_INIT程序俺就啃不过去哈~~ |
|
|
||
| 2011/06/10 22:00 |
|
|
|
[5楼] kuhaiwuya
等级:
注册时间:![]() 2011/05/02 00:14 文章: 13 离线 |
--------------------------------- 回复【4楼】 smy096 : --------------------------------- 回复【4楼】 smy096 : --------------------------------- 原子哥,可以把typedef __packed struct { #define Fat_Table_Size 10 //tinyFAT表大小 #define Fat_Head_Size 10 //tinyFAT表头大小 。。。何用? u8 Fat_Head_Pos; //tinyFAT表的上一个表头位置 。。。何用? u32 Fat_Base_Head[Fat_Head_Size];//tinyFAT表的 表头数组 。。。何用? u32 Fat_Base_Tab[Fat_Table_Size];//文件的tinyFAT基址表 u16 Fat_Base_Len[Fat_Table_Size];//基址偏移量 u8 Fat_Over; //文件的tinyFAT表是否全部读出标记位 }FAT_TABLE; 讲解一下,已经看FAT32一星期了,依然无头绪。 |
|
|
||
| 2011/06/10 22:03 |
|
|
|
[6楼] kuhaiwuya
等级:
注册时间:![]() 2011/05/02 00:14 文章: 13 离线 |
回复【楼主位】 正点原子 :
--------------------------------- 原子哥,可以把typedef __packed struct { #define Fat_Table_Size 10 //tinyFAT表大小 #define Fat_Head_Size 10 //tinyFAT表头大小 。。。何用? u8 Fat_Head_Pos; //tinyFAT表的上一个表头位置 。。。何用? u32 Fat_Base_Head[Fat_Head_Size];//tinyFAT表的 表头数组 。。。何用? u32 Fat_Base_Tab[Fat_Table_Size];//文件的tinyFAT基址表 u16 Fat_Base_Len[Fat_Table_Size];//基址偏移量 u8 Fat_Over; //文件的tinyFAT表是否全部读出标记位 }FAT_TABLE; 讲解一下,已经看FAT32一星期了,依然无头绪。 |
|
|
||
| 2011/06/10 22:14 |
|
|
|
[7楼] 正点原子
等级:
注册时间:![]() 2010/12/02 10:41 文章: 8097 来自: 湖南 在线 |
回复【6楼】 kuhaiwuya :
--------------------------------- 文件存放的地址可以从FAT表里面找到. 如果情况比较坏(文件比较大,或者磁盘空间比较乱),一个文件的地址在fat表里面可能不是连续的,比如第2,3,4,接着又是 8,9,10,11,接着又是23,24,25,26.这样,这个文件的存放就是不连续的,这里的2,8,23,就是表头.属于表头数组的一个元素. 如果一个文件是连续的,比如从2~200.那么他就只有一个表头,就是2. 这样,应该理解了吧? |
|
|
我的淘宝小店:http://shop62103354.taobao.com |
||
|
||
| 2011/06/11 20:19 |
|
|
|
[8楼] kuhaiwuya
等级:
注册时间:![]() 2011/05/02 00:14 文章: 13 离线 |
回复【7楼】 正点原子 :
--------------------------------- u32 Fat_Base_Head[Fat_Head_Size];//tinyFAT表的 表头数组 u32 Fat_Base_Tab[Fat_Table_Size];//文件的tinyFAT基址表 表头数组表示的是 文件的首簇号? 和 基址表 有和不同? u8 Fat_Head_Pos; //tinyFAT表的 上一个表头(指上一个表的标头 还是本表的表头?) 位置 |
|
|
||
| 2011/06/12 00:54 |
|
|
|
[9楼] 正点原子
等级:
注册时间:![]() 2010/12/02 10:41 文章: 8097 来自: 湖南 在线 |
结合我上面的说明,还不明白么?
|
|
|
我的淘宝小店:http://shop62103354.taobao.com |
||
|
||
| 2011/06/12 18:18 |
|
|
|
[10楼] kuhaiwuya
等级:
注册时间:![]() 2011/05/02 00:14 文章: 13 离线 |
回复【9楼】 正点原子 :
--------------------------------- u32 Fat_Base_Head[Fat_Head_Size];//tinyFAT表的 表头数组 u32 Fat_Base_Tab[Fat_Table_Size];//文件的tinyFAT基址表 还是不太明白 表头数组 和 文件基址 有什么不同? |
|
|
||
| 2011/06/13 00:20 |
|
|
|
[11楼] 正点原子
等级:
注册时间:![]() 2010/12/02 10:41 文章: 8097 来自: 湖南 在线 |
回复【10楼】 kuhaiwuya :
--------------------------------- 之前我的解释,应该放在Fat_Base_Tab才对,而不是对Fat_Base_Head. 这里的Fat_Base_Head是一个表头数组,而Fat_Base_Tab是一个基址数组. 整个不连续簇的最大范围是Fat_Base_Tab.size*Fat_Base_Head.size. 常用的是Fat_Base_Tab,在不连续簇不大于Fat_Base_Tab.size的时候,不需要用到Fat_Base_Head. Fat_Base_Head用于存放每Fat_Base_Tab.size个不连续簇的首簇地址. |
|
|
我的淘宝小店:http://shop62103354.taobao.com |
||
|
||
|
|
||
|
| 前往: |