在gpio端口的文件描述符I/O中有奇怪的东西



我在Linux中编码以控制我的板上的gpio端口,使用以下代码。然而,read()的结果总是0x10,这是LF换行的十六进制。电压是一个枚举变量,其整型值为0和1,分别代表低和高。Fd是gpio端口的文件描述符。0x30是字符'0'的十六进制代码。write()没有错误。

int set_gpio( int fd,enum voltage_e voltage)
{
    const unsigned char w_buff =0x30+voltage;
    unsigned char r_buff='2';
    if (0 >= write(fd, &w_buff, 1))
    {
        LOGD(" Error1 in setting gpio to  %d", voltage);
        return -1;
    }
    __usr_sleep(0, 10000000);
    if (read(fd, &r_buff, 1))
    {
        if (r_buff != 0x30+voltage)
        {
            LOGD(" r_buff is %d", r_buff);
            return -1;
        }
    }
    else
    {
        LOGD(" Error3 in setting gpio to %d", voltage);
        return -1;
    }
    return 0;
}

为了与shell实用程序兼容,GPIO端口的内容通常是后跟换行符的单个字符——例如:

% xxd /sys/class/gpio/gpio89/value
0000000: 310a                                     1.

向GPIO设备写入单个字符会将文件指针推进到第二个字符,这个字符通常是你看到的换行符。

在进行读/写操作之前,需要将文件指针重置到起点:

lseek(fd, 0, SEEK_SET);

相关内容

  • 没有找到相关文章

最新更新