OpenEdv-开源电子网

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

共享我的原创FAT32代码,和实现VS1003的录音功能

[复制链接]

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
发表于 2012-3-6 21:43:08 | 显示全部楼层 |阅读模式
 没事干来这里逛逛,顺便发个帖子

资料,代码都在附件里。

SD卡驱动以及硬件SPI驱动来自Qiyuan师兄发的AG开发板帖子的配套代码(我后来有做改动,不过没啥作用),VS部分驱动也是来自AG开发板的配套代码。
SD卡驱动代码好像正点原子师兄写的?印象中以前在51上搞SD的时候参考过《不完全手册》,上面的代码好像是一样的。

FAT32是原创的,VS1003录音功能是昨天才做好的,我给的相关资料有里有很多东东,我好像只看了VS的Datasheet和application note,以及一个中文资料,
资料里面还有模块的电路图,模块是直接去电子商店买的,没仔细研究过电路。。。

MP3播放功能当然也有,录了音以后就靠这个来播放呢。。。

视频中描述的功能其实是这样的。。。
我先说了一句:Hey ~ man.   
然后声音就录下来并写到SD卡上了。
然后就控制VS1003不停的播放刚才录下来的内容(耳机在我摄像的手机旁边,没录到。。。效果不好。。。不要被我富有磁性的声音迷倒了哈

测试代码的功能是这样的:
一上电,初始化完成后就进入录音模式,开始录音
然后当我串口发送任意字符时,录音停止,开始不停的回放。(串口发送信息的过程没录到视频里。。。)

至于电路连接,在程序的SD模块和VS1003模块相应的.c文件里写的很清楚了,我帖上来:
VS1003模块:
sbit VS_SO  =  1^6;  //串行数据输出,单片机从VS1003中读取数据
sbit VS_SI  =   1^5;   //串行数据输入,由单片机写入到VS1003
sbit VS_SCK  =  1^7; //串行时钟,由单片机产生
sbit VS_XCS   = 1^0;    //片选信号
sbit VS_XRESET = 1^1;   //复位信号
sbit VS_XDCS  = 1^2; //数据片选
sbit VS_DREQ  = 1^3;  //数据请求

SD模块:
//管脚定义
sbit SD_CS=P1^4; 
//{ 硬件SPI管脚
sbit clk  = 1^7;
sbit miso = 1^6;
sbit mosi = 1^5;
//} 硬件SPI管脚 //如果改了这些,SPI_ReadWriteByte也得改了。。。

再来张图好了,硬件上只有最小系统和一个STC免手动免冷启动下载辅助工具是我自己做的~ SD和VS1003模块都是买的
最小系统是上学期第一次PCB的时候做的,做得挺糟糕的,不过后来调试新硬件还离不它了,呵呵
STC免手动免冷启动下载辅助工具(图中的那个被电工胶布包着的小东西。。。)是上学期期末复习得蛋疼的时候做的,这个可有可无,
如果没有,用我现在的代码,在下载的时候也可以不用冷启动,按下复位键就行,实现这个功能的代码在Debug_Init函数里。
那个小东西的作用就是监视串口的下载命令,省去了手动去按复位键的环节,是用STC15系列的8脚单片机做的。(如果有人有兴趣,我以后再发代码和电路图)



    我用的MCU是STC12C5A60S2, 
    晶振24M

    编译警告可忽略: 
    本来我是想用来做不透明指针的,C51编译器貌似不好这口,给了我个警告。。。 
    ..\VS1003\VS1003.C(327): warning C230: 'File': uses undefined struct/union tag 'FileInfo' 

    因为我的代码向来都比较臃肿,所以编译成功可能需要配置: 
    http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5090488&bbs_page_no=1&search_mode=3&search_text=Pony279&bbs_id=9999  
    (见4楼)

为了节省时间,所以测试代码写得比较简陋,欢迎拍砖或鉴赏或围观~

视频.zip

5.49 MB, 下载次数: 9154

STC12-MP3.zip

117.54 KB, 下载次数: 3903

https://github.com/roxma
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-6 21:50:25 | 显示全部楼层
 SD和文件系统相关资料

SD和文件系统.zip

4.45 MB, 下载次数: 4556

https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-6 21:52:17 | 显示全部楼层
相关资料

相关资料.zip

31.04 MB, 下载次数: 26509

回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-6 22:07:44 | 显示全部楼层

介绍介绍文件系统代码功能: 

fread和fwrite是核心的功能(个人这个认为的)另外还有fseek,可以读写任意目录下的文件(至于删除文件的功能我还没写)的任意字节 

其实网上很多代码都有这些功能,那么这个代码有哪些不同?(感觉我好像在推销产品 = = )(让菜鸟自夸一下,勿喷哈~) 

1. 每个文件内部花了16个字节去维护了一个簇链,如果有一个好几M的文件在物理分布上是连续的,那么,如果你是一直顺序读这个文件,会很流畅,不需要 去读FAT表,也就是速度会快一点,(虽然fread本来是基于缓存的,但是我留出了一种更高效的直接操作缓冲区的用法,但是因为后来我把File结构体信息给隐藏了,这个叫封装。。。所以如果有需要的话,你得自己修改代码,把结构体的定义从模块中提出来。。。但是不建议这样做。。。) 

2. 个人认为内存开销还是比较小的,可以很容易移植到另的平台上(废话文件系统都应该这样。。。)
不过文件系统好像是至少要占512+200左右byte的内存吧,具体的我忘了(上面的代码里录音功能还需要占用256byte的内存) 

3. 我认为最大的优点就是,能支持同时多文件操作,当然,在51单片机上这样做效率会偏低,不过总会有应用场合的,比如说,你在处理一个文件的同时,在要利用字库文件等各种辅助的系统文件。刚才说到效率偏低,因为是利用了以时间换空间的原理,我也留出了修改的接口,在比较大的RAM上想提高效率,或者你只想处理一个文件(这种情况下没什么必要改,因为处理方式本身对效率影响不大,我认为从算法分析的角度上讲,影响速度的主要是硬件驱动的问题),都可以对代码进行一些修改 

也有最明显的缺点 
    因为我是菜鸟级的,所以文件系统模块的代码特别长,超过2K行了。。。

然后介绍介绍给外部提供有哪些函数,这些函数在定义那里都有详细说明功能,我这里只写名字,相信学过C的都看得懂: 
File* fopen(const u8* name_x,u8 mode); 
u16 fread(File* p_file,u8* buffer,u16 size); 
u16 fwrite(File* p_file,u8* buffer,u16 size); 
u8 fseek(File* p_file, signed long int offset, u8 fromwhere); 
u8 fclose(File* p_file); 

u8 ChangeDir(u8* path, u8 len, File* p_dir);  //改变当前目录的,第三个参数保留作拓展用的,一般为NULL就可以了 

这三个函数是扫描当前目录下有哪些文件,然后得到这些文件的文件名的,参数也是保留作拓展用的 
u8 MoveToFirstFile(File* p_dir); 
u8 MoveToNextFile(File* p_dir); 
u8 GetShortFileNameX(File* p_dir, u8* buf); 

现在暂时不支持FAT16和长文件名,以后有空了再写吧。。。



然后简单讲下文件系统的实现 

在FAT文件系统中,文件的存储是一种链表结构,这种结构记录在FAT表中,在初始化的时候通过读第0扇区可以得到一些基本的信息(如果第0扇区是MBR,那么还要去找DBR的位置) 

遵循这种结构,边看资料边写代码,读写的功能都不难实现(想是这样想的,其实写起代码来来是比较麻烦的), 

还有一点就是我在调试的时候通过串口信息发现,很多时候一个文件的存放在物理上是连续的,所以我就为每个被打开的文件加上16个字节去记录文件的分布情况,如果文件是完全连续的,那么读文件的时候就会非常流畅 
(注:其实这里说的被打开只是从逻辑上看好像是这样,因为得到一个文件的信息和操作一个文件需要开辟一些内存空间嘛,在不使用这个文件的时候又要回收这些空间嘛,回收的过程就是关闭文件啦) 

然后就是多文件操作的实现,我一开始以为不可能的,但是后来理了下思路后发现,是可以的。 
我只有一个512 BYTE的缓冲区,但是在每次读写文件前,都可以记录下当前在使用缓冲区的文件,并记录一些文件是否有被写入的信息,然后到另一个文件要使用缓冲区时,就根据之前记录的信息(比如说上一个文件如果有写入内容,那么就需要先把去更新缓冲区的内容写到相应的扇区) 

这样,从逻辑上看,每个被打开的文件都独占有一个512字节的缓冲区,文件内部只需要记录缓冲区对应的扇区地址,和文件是否被写入新数据的信息就可以了 

相信大家很容易看出,我这样处理会带来效率问题,但是,多文件操作我也只能这样实现了,如果只是操作一个文件,那么中间的几句判断对总体效率的影响是很小的。 
而且我也留出了让用户去修改的接口,可以改变我的多文件实现机制(就是文件创建的时候怎样分配缓存,文件操作前怎样处理缓存),但是一般不需要去改。 


再说说文件系统依赖的一些其它的模块 


debug.h 调试的时候辅助用的,如果需要这个模块,那么还需要串口模块,如果不需要,在包含之前通过一个宏定义#define NODEBUG就可以解决,相应的代码就全部变成空语句了 

utilities.h 一些比较简单又常用的函数,比如说StringCopy之类的,因为不想依赖没有源码的库,所以一些的函数就自己实现了 

memory.c  这块代码是从KEIL的安装目录下的malloc.c free.c 和 init_mempool.c 三个文件整合起来的,代码没怎么改动,
          只是简化了初始化函数,每打开一个文件,都会在动态内存里申请一些空间,如果你只想操作一个文件,那个比较
          大的数数组(叫内存池)的大小定义到60就可以了,这个大小的定义可以在sys.h文件里面找到。
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-6 22:21:44 | 显示全部楼层
还有一个我比较喜欢的代码,在这个头文件里:
macro_functions.h 
         这里面有一些提高代码阅读性的宏,比如说BIT(x)  SetBit() 通过使用这些宏,可以在写代码的时候和那些烦人的与或非说88了
      里面在有一个在C语言里实现写二进制的宏。
      至于这些宏怎么使用,大家可以参考里面的其它代码,在头文件里也有详细的说明。
      在入门STM32的时候,正点原子牛B的寄存器操作让我晕了很久,后来就把学51时写过的宏移植过去,才提高了代码的阅读性。。。 
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-6 22:29:03 | 显示全部楼层
奇怪,刚发的帖子,去刷新一下,居然显示不是新帖子。。。
https://github.com/roxma
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-3-6 22:33:06 | 显示全部楼层
楼主的代码初略看了下,fat部分还有log文件,可以看出是一点点积累起来的,精神可嘉.做的很不错,代码基本是你自己编写的,fat32楼主应该是吃透了.以后多多指教!
另外,热烈欢迎楼主来我们论坛.

对了,楼主如果感兴趣,我们可以送一个我们的Mini板给你(有点瑕疵的,但是功能正常).

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-6 22:35:03 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
log文件已经比较少去动它了,因为写代码的初期想法比较多,所以都记下来了,里面的readme也是以前版本的,只能作为参考了,不能通用。。。
https://github.com/roxma
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-3-6 22:39:37 | 显示全部楼层
不知道楼主有没有用过fatfs?
日本人写的,这个应用范围很广.可以借鉴一些fatfs的东西,日本人做的东西确实很好用,而且很规范.希望楼主也能写出非常好的代码.国内做实事的人太少了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-6 22:41:27 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
吃透也不算吧,因为有些地方写的并不严谨,比如两个fat表,我代码里面不做判断的就直接使用了第一个(只因为一般是这样),好像英文datasheet上有提到可能不是这样了,隔了一段时间,自己都记不清楚了,呵呵
这个文件系统的通用性也不好,因为扇区大小必须是512 byte,只支持FAT32
https://github.com/roxma
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-3-6 22:44:54 | 显示全部楼层
回复【10楼】Pony279:
---------------------------------
所以需要完善.
很多东西都是慢慢完善的.
fat表,在读的时候,只是用一个即可.写的时候,需要2个表都写.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-6 22:45:45 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
用倒没用过,只是听说过那个很不错,然后去下载过源码,但是一直没多少时间去仔细研究
记得那个是要RTC的支持的,我在51上写这个的时候比纠结了一段时间,后来也还是没添加这个的支持,比较心急,接口都没留,只能以后要拓展的时候再回去看以前的代码了,改以前的代码都是一个痛苦的过程啊。。。
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-6 22:50:03 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
嗯,我的代码里只操作了一个FAT表,写的时候,也是纠结了很久,最后只写了一个FAT表,,,虽然电脑上看那个文件没问题,不过一直都是有点不放心,
在英文资料里,我没找到说明,记得有篇文章提到,每次都写两个FAT表,那么对数据恢复来说就是一声场噩梦。。。
所以这一点,我一直都不知道怎么做。。。
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-6 22:58:49 | 显示全部楼层
这么快就精华啦,谢谢鼓励,我以后继续努力~
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-6 23:01:34 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
哈哈,我对STM32当然感兴趣了,欣然接受哇~
https://github.com/roxma
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-3-6 23:19:28 | 显示全部楼层
回复【13楼】Pony279:
---------------------------------
FAT2紧跟FAT1.
在fat1的后面就是FAT2表了,所以你只要同样的数据偏移一个fat表大小写进去就可以了.

留下你的地址和联系方式,明天发给你.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-6 23:28:08 | 显示全部楼层
回复【16楼】正点原子:
---------------------------------
好的,已经用论坛短信发了。
https://github.com/roxma
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-3-6 23:33:55 | 显示全部楼层
呵呵,收到,华工的.我05级的.
才大二,有前途啊.呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-6 23:42:18 | 显示全部楼层
回复【18楼】正点原子:
---------------------------------

在学校里有听说过师兄的大名啊~


我现在主要还是对51比较熟,虽然有接触过ARM,但懂的都只是一些皮毛,更别说uCos那些了,以后还请师兄多多指教!
https://github.com/roxma
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
发表于 2012-3-7 09:04:59 | 显示全部楼层
又是个有实干精神,有才的小伙子,学习了。
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-7 09:11:45 | 显示全部楼层
关于VS1003录音实现的,网上的资料比较少,我的表达能力也不好,只是在写代码前做了一点笔记,需要注意的问题和操作流程:
 
1. Before activating ADPCM recording, user should write a clock divider value to SCIAICTRL0.

2. Also, before activating ADPCM mode, the user has to set linear recording gain control to register SCIAICTRL1

3. VS1003进入录音模式需要同时对MODE寄存器置位软件复位和ADPCM录音模式同时置位

4. The IMA ADPCM sample buffer is 1024 16-bit words. The fill status of the buffer can be read from SCIHDAT1

有关文件存储:
1. VS1003接收到的录音数据是大端的,存放到文件中也应该是大端的
2. 录音文件的文件头部分的内容是小端的。
3. 录音的数据是一块一块(block)的,每块占128 * 2个字节。

其实仔细看datasheet就会发现,我写的这些在上面都有提到,我做的只是把写代码需要留意的地方简单的写出来,最终写代码的时候还是离不开datasheet的,

至于MP3功能的实现,网上资料比较多,我发的相关资料里面也有一个中文资料也有讲这个,我就没必要说了。


另外,
昨晩又看了一下代码,录音部分应该是可以稍微改动一下的:
这个是datasheet里面有的一段参考代码,
do {
w = ReadMp3SpiReg(SCI_HDAT1);
} while (w < 256 || w >= 896); /* wait until 512 bytes available */
录音函数中的有段代码是直接抄datasheet上的示例代码的,但是我这里不是每次读512bytes的,而是256bytes(读128次VS1003的寄存器SCI_HDAT0)的,所以被我改成了这样
do {
    w = VS_ReadReg(SCI_HDAT1);
  /*
   Note: if SCIHDAT1 >= 896, it may be better to wait for the buffer to overflow and clear before reading
   samples. That way you may avoid buffer aliasing.
  */
  } while ((w >= 896)|| (w == 0)); //放弃最后一段数据,为0的时候也不能读

注:上面注释的note上从datasheet上抄来的。改动后测试正常,小改动,我就没必须重新上传代码了吧。。。



对于VS1003录音的数据读取比较让人郁闷啊,数据不是通过SDI (serial data interface) 去读取(播放MP3的时候是用SDI去发送数据的),而是通过SCI (serial command interface ) 读寄存器SCI_HDAT0的,
我还做过一个测试:进入录音模式后,记录SCI_HDAT1的值,读128次SCI_HDAT0,再读SCI_HDAT1的值,发现SCI_HDAT1的值依然是在增长的,
SCI_HDAT1寄存器好像是一个指针,但是它又不是指针,我也不知道它是啥,SCI_HDAT1/128 总是一个整数,这个寄存器有什么用在手册上也有说明,
为0的时候不能读SCI_HDAT0
测试的结论是,读的时候不得不放弃一部分数据,手册上的示例代码也是这样做的。


至于怎样判断已经进入了录音模式:
进入录音模式后,如果耳机还连着VS1003,那你可以听到它录下来的声音的效果,这个是我在后来才发现的,
我最初的测试是:在进入录音模式之前,我读了很多次SCI_HDAT0,但是发现都是0,按照datasheet的说明写了激活录音模式的代码后,我再读SCI_HDAT0,发现读出来的数基本上是随机的,由此判断我的代码没出问题,然后才进一步写后面的代码。毕竟写代码都应该是一点一点来的,一下子写多了,我就没办法调试了。
https://github.com/roxma
回复 支持 反对

使用道具 举报

98

主题

408

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2010-12-14
在线时间
0 小时
发表于 2012-3-7 10:10:58 | 显示全部楼层
谢谢楼主!
回复 支持 反对

使用道具 举报

21

主题

135

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2011-4-12
在线时间
0 小时
发表于 2012-3-7 10:46:12 | 显示全部楼层
佩服~加油
回复 支持 反对

使用道具 举报

12

主题

216

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2011-4-7
在线时间
3 小时
发表于 2012-3-10 00:40:31 | 显示全部楼层
mark
回复 支持 反对

使用道具 举报

5

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2011-12-2
在线时间
0 小时
发表于 2012-3-11 20:21:26 | 显示全部楼层
强,学习楷模。
回复 支持 反对

使用道具 举报

13

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2011-8-2
在线时间
0 小时
发表于 2012-3-12 23:18:58 | 显示全部楼层
大二就这么牛,想想我大二时那会儿一直2着呢
回复 支持 反对

使用道具 举报

13

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2011-8-2
在线时间
0 小时
发表于 2012-3-12 23:26:19 | 显示全部楼层
请教下:什么事不透明指针啊?
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-12 23:59:04 | 显示全部楼层
回复【27楼】提刀上马:
---------------------------------

C语言允许你
typedef struct some_struct* P;
然后你只使用指针
P p = GetInstance();
Operation(p, ...);

外部的用户不知道结构体里面有什么内容,
只需要有个指针就行,免得用户使用不当,破坏了数据结构。
https://github.com/roxma
回复 支持 反对

使用道具 举报

13

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2011-8-2
在线时间
0 小时
发表于 2012-3-13 15:00:05 | 显示全部楼层
 回复【28楼】Pony279:
---------------------------------
哦,谢谢!!  能不能推荐几个相关的文档或书,我好好看看,看着很有意思哈
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-13 21:53:21 | 显示全部楼层
回复【29楼】提刀上马:
---------------------------------
文件系统的主要资料在附件里有了,
VS1003播放的资料网上很多,录音的资料就只有datasheet了,
而关于C语言的,刚才说的不透明指针的概念只是一种封装的技巧,在一本书上偶遇后百度得知...
https://github.com/roxma
回复 支持 反对

使用道具 举报

13

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2011-8-2
在线时间
0 小时
发表于 2012-3-13 22:14:34 | 显示全部楼层
回复【30楼】Pony279:
---------------------------------
嗯,,这个不透明指针网上资料貌似不多啊
回复 支持 反对

使用道具 举报

26

主题

194

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1175
金钱
1175
注册时间
2011-8-20
在线时间
21 小时
发表于 2012-3-30 22:25:33 | 显示全部楼层
不错,支持!VS1053模块和我一样的,呵呵,SD卡也是,那个壳边上焊接不好,楼主用电胶布粘着吧。  振南电子的那个于振南有个类似的东西
for( int i=0; i<(1.0/0); i++ ) { for( int j=0; j<365; j++) money ++; age ++; if( age > 30 ) ChangeJob( Boss ); } 脸上的痘痘提醒我?我还年轻?口袋的米米告诉我?我仍需努力
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-3-30 23:36:27 | 显示全部楼层
回复【32楼】 subo19920716 :
---------------------------------
"那个壳边上焊接不好,楼主用电胶布粘着吧"

眼力真好,
以前在调试的时候,不小心弄松了,然后就想了这个办法粘上去了。。。


其实我写这个文件系统还算是意外,当初学习的时候不知道有现成的可以抄的了,
那个时候比较傻,自己又不懂得上网查资料,
然后我问同学有没有MP3和SD的例程,同学就给了我驱动代码,以及FAT32文件系统的资料,
我以为只有那些资料了,然后就自己奋战了好多几天,才搞了个文件系统的雏形出来
记得那个时候有好几天都熬到3点的啊,白天还得上课,。。。

做好后,我发现原来网上早就有现成的代码,振南的有,Qiyuan的AG开发板也有这个例程,然后我就问同学,他说
"对啊,有例程的啊"
"那你为什么不早把例程发给我"
"我以为你想自己写"
我...

刚做出来代码比较少的,后来想反正写都写出来了,就在闲暇的时候回来看看,完善完善,

不过到现在为止,还是有一些地方不太好,所以以后还打算继续改进的,
但是51折腾这个太辛苦了,看里面的log文件,
"51的RAM太小,xxx没必要实现" 这句话貌似出现过几次了,虽然最后都实现了,弄起来确实是比较麻烦的

计划是以后移植到STM32上,再继续完善的,在这之前想先把C++版的STM32实验给做完,一直做到SPI吧,才会开始移植。

https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-4-23 13:45:49 | 显示全部楼层
好消息,文件系统在STM32上移植成功了!!!
坏消息,移植后的代码使用的是C++的环境,将来不再使用C去完善这个系统了。

http://www.openedv.com/posts/list/3210.htm#23651 (38楼)

另外,发现一个 bug, 
打开文件的时候如果文件不存在,会自动创建文件,
检查后发现,是我把  fopen 里的
if(  (mode & FILE_CREATE ) == 0)
写成了
if(  (mode | FILE_CREATE ) == 0)
https://github.com/roxma
回复 支持 反对

使用道具 举报

16

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2012-3-20
在线时间
9 小时
发表于 2012-5-16 10:43:57 | 显示全部楼层
MARK
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2012-6-8
在线时间
0 小时
发表于 2012-6-25 17:52:44 | 显示全部楼层
请问一下~~您说到录音的时候会听到录的内容,这个能取消吗???录得时候不想听啊!
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-6-25 17:57:39 | 显示全部楼层
这个我不知道哦,你找找手册里面有没有说明,或者把音量调到最小试试,录完恢复音量。。。。
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-6-26 11:56:22 | 显示全部楼层
回复【38楼】keyway:
---------------------------------

16-32没试过,不清楚

删除文件现在暂时还不支持
https://github.com/roxma
回复 支持 反对

使用道具 举报

62

主题

275

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1154
金钱
1154
注册时间
2012-3-4
在线时间
80 小时
发表于 2012-7-20 22:43:28 | 显示全部楼层
大二牛人,我大二才知道有51的板子,才知道有c语言写
回复 支持 反对

使用道具 举报

3

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2012-8-11
在线时间
27 小时
发表于 2012-8-21 15:22:54 | 显示全部楼层
 顶!
回复 支持 反对

使用道具 举报

30

主题

210

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
金钱
373
注册时间
2012-11-22
在线时间
12 小时
发表于 2012-11-22 11:52:26 | 显示全部楼层
回复【36楼】feilin:
---------------------------------可以,修改下程序。我们的板子有些是能边录边听,有的是录时不能听。你可能拿去的就是一边听一边录的那种板子
VLSI?大陆区一级授权代理商,提供技术支持,QQ839638158?VS1003?VS1053?VS1063?VS1011?VS1005?VS1205?VS1103?VS1033?VS8005?VS8053?VS1000?VS23S010?VS1163?开发板,淘宝店铺http://shop105947990.taobao.com/?QQ2355355257
回复 支持 反对

使用道具 举报

30

主题

210

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
金钱
373
注册时间
2012-11-22
在线时间
12 小时
发表于 2012-11-22 11:54:28 | 显示全部楼层
回复【39楼】Pony279:
---------------------------------
可以修改下程序,就没问题了,有的是有些是能边录边听,有的是录时不能听
VLSI?大陆区一级授权代理商,提供技术支持,QQ839638158?VS1003?VS1053?VS1063?VS1011?VS1005?VS1205?VS1103?VS1033?VS8005?VS8053?VS1000?VS23S010?VS1163?开发板,淘宝店铺http://shop105947990.taobao.com/?QQ2355355257
回复 支持 反对

使用道具 举报

126

主题

820

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1683
金钱
1683
注册时间
2012-10-28
在线时间
62 小时
发表于 2012-12-12 19:56:14 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2012-8-28
在线时间
3 小时
发表于 2013-4-24 21:23:19 | 显示全部楼层
回复【13楼】Pony279:
---------------------------------
楼主能不能加个qq?榜样的力量是无穷的。虽然我都大三了。。。
interest?is?magic
回复 支持 反对

使用道具 举报

126

主题

820

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1683
金钱
1683
注册时间
2012-10-28
在线时间
62 小时
发表于 2013-4-25 07:54:05 | 显示全部楼层
TKS
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2013-6-24
在线时间
0 小时
发表于 2013-6-25 16:36:17 | 显示全部楼层
回复【2楼】Pony279:
---------------------------------
正在研究这个,楼主能否价格qq
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-7-23
在线时间
3 小时
发表于 2013-7-23 09:40:28 | 显示全部楼层
牛逼轰轰
回复 支持 反对

使用道具 举报

11

主题

125

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2012-6-21
在线时间
8 小时
发表于 2013-7-24 13:48:50 | 显示全部楼层
牛!
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1863
金钱
1863
注册时间
2011-3-29
在线时间
139 小时
发表于 2013-7-25 10:04:26 | 显示全部楼层
牛啊。以前想写没写成,因为发现需考虑的太多了,自己的智商不够用。你这个能够写入吗?读的话支持fat12与16吗?
业余程序玩家。
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2013-7-25 16:24:09 | 显示全部楼层
回复【50楼】ofourme:
---------------------------------
能写入,不过比较伤卡(内存不够,不像FATFS那样缓冲了FAT表),不支持FAT12和FAT16
https://github.com/roxma
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 12:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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