【发布时间】:2013-04-10 20:56:39
【问题描述】:
我正在使用以下代码在 Linux 中编写代码来控制我板上的 gpio 端口。但是,read() 的结果始终是 0x10,它是用于 LF 换行的十六进制。 电压是一个枚举变量,int 值为 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;
}
【问题讨论】:
-
fd打开到什么文件? -
@duskwuff fd 被打开到一个 gpio 端口,路径为:/sys/calss/gpio/gpio102/value。
标签: c file-io embedded-linux file-descriptor