【问题标题】:Is it possible to export multiple GPIOs at once in embedded Linux?是否可以在嵌入式 Linux 中一次导出多个 GPIO?
【发布时间】:2014-04-09 16:47:46
【问题描述】:

在运行 Raspbian 的 Raspberry Pi 上工作,我正在尝试使用驱动程序样式的 C 代码来访问 GPIO。要将 GPIO 引脚导出到用户空间,我必须将引脚号写入 /sys/class/gpio/export。是否可以在单个文件写入中导出多个引脚?例如,我想做:

int initGPIO(int pins[], int numPins){
char buffer [50]; int numBytes; 

int fh = open("/sys/class/gpio/export", O_WRONLY);
if(fh<0) return -1;

int i;
numBytes = 0; 
sprintf(buffer, "");
for (i=0; i<numPins; i++){
    numBytes += sprintf(buffer, "%s\n%d", buffer, pins[i]);
}
return write(fh, buffer, numBytes);
close(fh);
}

当给定 [2,3,4] 作为输入数组时,此函数仅导出引脚 2。有什么方法可以将引脚写入导出文件以便它们都被导出?感谢您的宝贵时间!

【问题讨论】:

    标签: c linux raspberry-pi embedded-linux


    【解决方案1】:

    没有:)

    一个快速的解决方案可能是将您的代码包装在一个循环中,如下所示:

    int initSingleGPIO(int pin)
    {
        char buffer [50]; 
        int numBytes; 
    
        int fh = open("/sys/class/gpio/export", O_WRONLY);
    
        if(fh<0) return -1;
    
        sprintf(buffer, "");
    
        numBytes = sprintf(buffer, "%s\n%d", buffer, pin);
    
        int rv = write(fh, buffer, numBytes);
    
        close(fh);
    
        return rv;
    }
    
    int initGPIO(int pins[], int numPins)
    {     
        int i;   
        for (i=0; i<numPins; i++)
        {
            initSingleGPIO(pins[i]);
        }
    
    }
    

    【讨论】:

    • 你的代码有一个小的逻辑错误 - 它有return write(fh, buffer, numBytes),所以从未到达close(fh),导致文件描述符泄露。我已经为你解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 2014-04-01
    相关资源
    最近更新 更多