2014-05-24 15 views
1

5 밀리 초마다 BBB에있는 7 개의 아날로그 핀을 모두 읽어야합니다. 나는 다음과 같은 C 코드로 그렇게하고 있어요 :아날로그 입력을 beaglebone black으로 빠르게 읽음

void main(){ 
    char value_str[7]; 
    long int value_int = 0; 

    FILE* f0 = fopen("/sys/bus/iio/devices/iio:device0/in_voltage0_raw", "r"); 

    while(1){ 
      fread(&value_str, 6, 6, f0); 
      value_int = strtol(value_str,NULL,0); 
      printf("0 %li\n", value_int); 
      fflush(stdout); 

      usleep(5000); 
      rewind(f0); 
    } 

Hoever에서, CPU 사용량이 정말 높은 (20 %)까지 간다. 아날로그 입력을 다르게 읽음으로써 CPU를 많이 사용하지 않는 방법이 있습니까? 누군가는 "DMA"를 제안했지만 그 점에 대해서는 완전히 분실했습니다 ...

어떤 도움을 주실 수 있습니다.

답변

4

This thread 매우 유용 내가 libpruio를 사용하여 종료> started- 받아야합니다. 그것은 PRU를 사용하여 Beagle에 내장 된 io 핀과 아날로그 - 디지털 변환기를 읽습니다. 내가 사용을 끝내 코드 :

#include <stdio.h> 
#include <unistd.h> 
#include "pruio_c_wrapper.h" 
#include "pruio_pins.h" 

int main(int argc, const char *argv[]) { 
    PruIo *io = pruio_new(0, 0x98, 0, 1); 
    if (io->Errr) { 
     printf("Initialisation failed (%s)\n", io->Errr); 
     return 1; 
    } 

    if(pruio_config(io, 0, 0x1FE, 0, 4, 0)){ 
     printf("Config failed (%s)\n", io->Errr); 
     return 1; 
    } 

    while(1){ 
     printf"\r%12o %12o %12o %12o %4X %4X %4X %4X %4X %4X %4X %4X\n" 
     , io->Gpio[0].Stat, io->Gpio[1].Stat, io->Gpio[2].Stat, io->Gpio[3].Stat 
     , io->Value[1], io->Value[2], io->Value[3], io->Value[4], io->Value[5] 
     , io->Value[6], io->Value[7], io->Value[8]); 
     usleep(1000); 
    } 

    pruio_destroy(io); 

    return 0; 
}