繁体   English   中英

适用于Linux的GPIO示例代码

[英]GPIO sample code for Linux

static int
GPIOUnexport(int pin)
{
    char buffer[BUFFER_MAX];
    ssize_t bytes_written;
    int fd;

    fd = open("/sys/class/gpio/unexport", O_WRONLY);
    if (-1 == fd) {
        fprintf(stderr, "Failed to open unexport for writing!\n");
        return(-1);
    }

    bytes_written = snprintf(buffer, BUFFER_MAX, "%d", pin);
    write(fd, buffer, bytes_written);
    close(fd);
    return(0);
}

我有一些与上述GPIO代码有关的问题

1)为什么使用ssize_t? 为什么不只使用int?

2)/ sys / class / gpio / unexport是系统文件吗?如果不是,它是什么?

3)snprintf打印一些内容到缓冲区,然后写功能是否冗余? 或什么写功能可以做不同?

4)我可以使用ioctl函数来代替open来代替吗?

  1. 我不知道为什么代码示例使用ssize_t ; snprintf的返回类型为int因此使用int会更好(避免隐式强制转换)。 ssize_t是带符号的,并且在大多数情况下,它至少与int一样大,因此可能不会造成任何危害。

  2. 是的,它是Linux上的系统文件。 将GPIO引脚号写入该文件将使通用GPIO驱动程序“取消导出” GPIO引脚,从而有效地使该驱动程序声明不再处理该引脚(允许其他GPIO驱动程序使用它)。

  3. 您可以使用dprintf直接将其写入文件描述符fd ,然后就不需要临时缓冲区。 dprintf与其他printf变体相比不太为人所知,因此也许这就是为什么原始代码的作者决定改为使用中间缓冲区,然后仅调用标准的低级write函数。

  4. 您指的是哪种ioctl函数?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM