2012-07-24 68 views
1

以下shell命令切换Leopardboard GPIO 31就好:如何控制embedded-linux gpio?

echo 31 > /sys/class/gpio/export 
echo out > /sys/class/gpio/gpio31/direction 
echo 0 > /sys/class/gpio/gpio31/value 
echo 1 > /sys/class/gpio/gpio31/value 
echo 0 > /sys/class/gpio/gpio31/value 

This被用作用于以下的代码的例子。 任何想法为什么下面的.vala代码不会切换gpio 31?

public void sync() { 
    int fd = -1; 
    fd = open("/sys/class/gpio/export", O_WRONLY); 
    if (fd < 0) { 
     GLib.stdout.printf("Error sync export\n"); 
     return; 
    } 
    write(fd, "31", 3); 
    close(fd); 
    fd = open("/sys/class/gpio/gpio31/direction", O_WRONLY); 
    if (fd < 0) { 
     GLib.stdout.printf("Error sync direction\n"); 
     return; 
    } 
    write(fd, "out", 4); 
    close(fd); 
    fd = open("/sys/class/gpio/gpio31/value", O_WRONLY); 
    if (fd < 0) { 
     GLib.stdout.printf("Error sync value\n"); 
     return; 
    } 
    write(fd, "0", 2); 
    write(fd, "1", 2); 
    Thread.usleep (1000); /* 1ms */ 
    write(fd, "0", 2); 
    close(fd); 
} 

回答

3

echo 31实际上会导致\ X33 \ X31 \ X0A,但你的write的通话将写\ X33 \ X31 \ X00。试试这样的:

write(fd, "31\n", 3); 

而且你会想对write的其他调用进行类似的调整。