• 5475阅读
  • 0回复

QT里面mmap()问题请教 [复制链接]

上一主题 下一主题
离线duancp
 

只看楼主 倒序阅读 楼主  发表于: 2009-08-18
我使用的是2.6.29内核+QT4在2440上做程序,我先是在2440里面做了个AD驱动程序,现在想把这个AD文件映射到我的QT用户程序里去。下面是我的程序,AD驱动应该是没有问题的,因为我把下面的程序放在完全的C语言环境编译(不使用QT编译)的话,可以驱动AD进行采样工作并可以正确得到数据,但是如果是把这段程序放在QT里面的话,程序也可以运行,不会出现死机之类的情况,只是得到的数据全部为0,请问是什么原因?谢谢了!

#define S3C2410_ADCCON  0x00
#define S3C2410_ADCDAT0    0x0C
#define S3C2410_ADCCON_PRSCEN  (1<<14)
#define S3C2410_ADCCON_PRSCVL(x) (((x)&0xFF)<<6)
#define S3C2410_ADCCON_SELMUX(x) (((x)&0x7)<<3)
#define S3C2410_ADCCON_ENABLE_START (1<<0)
#define START_ADC(ch, prescale) S3C2410_ADCCON_PRSCEN | S3C2410_ADCCON_PRSCVL(prescale) \
                                | S3C2410_ADCCON_SELMUX(ch) | S3C2410_ADCCON_ENABLE_START


;
unsigned long int i;
volatile  int *ADCCON;
volatile  int *ADCDATA;
unsigned int result;
void *map_base;
unsigned char data[LOOP];

AD_fd = open("/dev/adc",O_RDWR);
if (AD_fd < 0)
{
  perror("cannot open adc");
  exit(1);
}

map_base = mmap(NULL,0x14,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
  ADCCON = (volatile int*)((volatile int*)map_base + S3C2410_ADCCON);
  ADCDATA = (volatile int*)((volatile int*)(map_base + S3C2410_ADCDAT0);

for (i=0;i<LOOP;i++)
{
  *ADCCON = START_ADC(1,20);
  do
  {
  result = (*ADCCON);
  }
  while(result & 0x01);
  do
  {
  result = *ADCCON;
  }
  while(!(result & 0x8000));
  data = (*ADCDATA) & 0x3ff;

}
[ 此帖被duancp在2009-08-18 11:08重新编辑 ]
快速回复
限100 字节
 
上一个 下一个