Быстрое считывание аналоговых входов в черном цвете «бигльбон»

Мне нужно считывать все 7 аналоговых контактов в BBB каждые 5 миллисекунд. Я делаю это со следующим кодом C:

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);
    }

Однако загрузка процессора становится очень высокой (20%). Есть ли способ по-другому читать аналоговые входы, чтобы он не использовал столько ЦП? Кто-то предложил "DMA", но я совершенно потерялся в этом отношении...

Любая помощь будет оценена.


person Rafael Vega    schedule 24.05.2014    source источник


Ответы (2)


Эта тема в BBB форум был очень полезным, и в итоге я использовал libpruio. Он использует PRU для считывания встроенных в Beagle контактов ввода-вывода и аналого-цифровых преобразователей. Код, который я использовал:

#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;
}
person Rafael Vega    schedule 12.06.2014

Я предлагаю вам использовать PRU. Это очень быстро! Это должно помочь вам начать-> http://www.element14.com/community/community/knode/single-board_computers/next-gen_beaglebone/blog/2013/08/04/bbb--high-speed-data-acquisition-and-web-based-ui

person Zaxter    schedule 06.06.2014
comment
Если я правильно понимаю, в той статье описано, как читать семплы с внешнего АЦП. Я хотел бы использовать встроенные АЦП BBB. - person Rafael Vega; 12.06.2014