2016-11-14 1 views
1

사용자 공간의 IIO 드라이버를 사용하여 ADC (AD7924)의 값을 읽습니다. 트리거 된 수집 작업 (트리거 생성, 할당, ADC 채널 활성화, 버퍼 크기 설정 및 활성화)을위한 모든 단계를 수행했습니다. 이 코드는 다음과 같습니다.IIO Linux : 버퍼가 가득 찼을 때 어떻게 알 수 있습니까?

// Create IIO trigger 
system("echo 0 > /sys/devices/iio_sysfs_trigger/add_trigger"); 

// Assign IIO trigger "sysfstrig0" to IIO AD7923 driver 
system("echo sysfstrig0 > /sys/bus/iio/devices/iio:device0/trigger/current_trigger"); 

// Enable scan of the first 3 channels for AD7924 
system("echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage0_en"); 
system("echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage1_en"); 
system("echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage2_en"); 
system("echo 0 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage3_en"); 

// Dim IIO buffer and enable it 
sprintf(CommandeADC, "echo %d > /sys/bus/iio/devices/iio:device0/buffer/length", NB_ECH); 
system(CommandeADC); 
system("echo 1 > /sys/bus/iio/devices/iio:device0/buffer/enable"); 
//Launch acquisition... 
system("echo 1 > /sys/bus/iio/devices/trigger0/trigger_now"); 

이렇게 구성된 시스템은 수집을 처리하고 전체 버퍼를 채 웁니다. 일단 꽉 차면 획득이 중단됩니다.

제 질문은 : 버퍼가 완전히 채워진 때를 어떻게 알 수 있습니까? 나는 iio : device0에있는 파일에서 poll 또는 select 함수를 사용하여 파일 기술자의 변경 사항을 확인하기 위해 /dev/에 시도했지만 POLLIN 이벤트를 확인하여 수집이 시작된 시점 만 알 수있었습니다.

답변

0

누구에게 도움이 될지 모르지만, 수집이 진행되는 동안 측정 값을 읽는 데 버퍼 파일을 반복적으로 읽지 않아야했습니다. 이 방법으로 예상 샘플 수를 읽으면 프로그램에서 안전하게 샘플을 처리 할 수 ​​있습니다.

또한, 버퍼를 해제하는 종류의 시스템이 다른 명령을 진행할 수 befe 완료 인수를 기다리는 것이 보인다

 system("echo 0 > /sys/bus/iio/devices/iio:device0/buffer/enable"); 

이 두 번째 솔루션은 더 폴링 방법입니다.

관련 문제