QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1025|回复: 2

pxa255平台,rmk7-pxa2的补丁,要测试音频的录音

[复制链接]
发表于 2004-9-24 10:13:24 | 显示全部楼层 |阅读模式
平台:仿照intelpxa255开发板作的。
系统:2.4.19的内核打了rmk7和pxa2的补丁
目标:写测试程序测试音频的录音功能。
问题:第一次运行测试程序,可以正常的录音,但是接着再运行测试程序录音,
发现测试程序运行时本来每隔一秒打印一次的调试语句显示的飞快,播放录下的文件,
只有微弱的电流声;察看录下的文件,发现其大小正常,但是用ultra edit察看其内容的时候,
全是0,表明从设备中读出的全是0。

测试函数如下所示:
#define DATA_BUF_LEN (4*1024)
//
// record_fun: record sound functions.
//
int record_fun(char *filename,char *strsec)
{
int n_sec; //要录制的时间长度(秒)
int fd_file,fd_dev;
int nread,ntimes_per_sec,i;

n_sec=atoi(strsec);
ntimes_per_sec=(2*2*4430/DATA_BUF_LEN;

if((fd_file=open(filename,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))<0) {
printf("create audio file %s failed\n",filename);
return -1;
}
if((fd_dev=open(AUDIO_DEV,O_RDONLY))<0) {
printf("open device file %s failed\n",AUDIO_DEV);
close(fd_file);
return -1;
}
printf("record to file %s\n",filename);
while(n_sec>0) {
for(i=0;i<ntimes_per_sec;i++) {
if((nread=read(fd_dev,tmpbuf,DATA_BUF_LEN))<=0) {
printf("read from dev file %s failed\n",AUDIO_DEV);
close(fd_file);
close(fd_dev);
return -1;
}
if(write(fd_file,tmpbuf,nread)<0) {
printf("write to audio file %s failed\n",filename);
close(fd_file);
close(fd_dev);
return -1;
}
}
--n_sec;
printf("%d second%c left\n",n_sec,n_sec>1?'s':' ');
}
printf("record finished\n");
close(fd_file);
close(fd_dev);
return 1;
}
请大侠们指点问题出在哪儿?
谢谢了!
发表于 2004-9-24 10:16:05 | 显示全部楼层
程序飞了???
回复

使用道具 举报

 楼主| 发表于 2004-9-24 10:42:11 | 显示全部楼层
不是飞了,程序能够正常地开始并结束(表面上看),没有引起任何的异常
可是只有头几次录下来的东西播放出来有声音,其他的拿ulteredit打开一看,
内容全是零,感觉好像dma缓冲里放的都是零。
这两天我仔细地看了源代码,通过调试,发现dma中断正常发生,也正常地从开辟
的缓冲中读取数据,也没有内存泄漏的情况,找不到原因在什么地方。
每次通过软件在录音前打开ADC,录音后关闭ADC,也还是不行,就差直接reset了
手头没有任何硬件调试工具,大家给出出主意吧。
有人碰到过类似的情况吗?
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-24 13:17 , Processed in 0.041181 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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