簡體   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