gpt4 book ai didi

beagleboneblack - 在 beaglebone black 中快速读取模拟输入

转载 作者:行者123 更新时间:2023-12-02 08:33:47 28 4
gpt4 key购买 nike

我需要每 5 毫秒读取一次 BBB 中的所有 7 个模拟引脚。我正在使用以下 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);
}

但是,cpu 使用率上升得非常高 (20%)。有没有什么方法可以不同地读取模拟输入,这样它就不会占用太多的 CPU?有人建议使用“DMA”,但在这方面我完全迷失了......

我们将不胜感激。

最佳答案

This thread在 BBB 论坛上非常有用,我最终使用了 libpruio .它使用 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;
}

关于beagleboneblack - 在 beaglebone black 中快速读取模拟输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23842767/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com