|
嵌入式Linux必不可少的一部分内容就是还要接触硬件底层,T113开发板包含了比较丰富的外设,所以就来测试一下外设的使用,也是夯实基础操作的过程。结合资料内容主要做GPIO测试,input事件读取,也就是读轻触按键。
板子上的LED共有3颗且颜色不一。已蓝色LED为例,在命令行窗口是可以直接用shell命令进行操作。
比如关闭心跳功能
- echo none > /sys/class/leds/led-blue/trigger
复制代码 熄灭LED操作,至于为什么写1是熄灭,这跟硬件设计有关。- echo 1 > /sys/class/leds/led-blue/brightness
复制代码 点亮LED操作
- echo 0 > /sys/class/leds/led-blue/brightness
复制代码 恢复心跳功能
- echo heartbeat > /sys/class/leds/led-blue/trigger
复制代码 以上命令均测试无误。
但我们一般都是在程序里去操作GPIO,所有还是以代码方式去实现。在之前配置好的CodeBlocks里去编写和编译。
然后在板子上去运行以上代码的可执行文件,就可以关闭心跳功能了。其他点亮熄灭操作类似。
接下来测试下按键。Linux 的/dev/input/eventx 设备可以用来方便地调试鼠标、键盘、触摸板等输入设备。所以写程序就是读取input。但首先要知道这个按键对应的输入事件,通过shell命令很容易获取到。
得到这个结果,那么程序就可以编写了
以上程序运行后进入阻塞态,按键按下打印字符串Pressed,抬起后打印字符串Released。到这里其实没多大用处,实际应用多伴随着其他的操作,比如开关LED,因此结合前面的测试,做以下代码
- int main()
- {
- int fd = open("/sys/class/leds/led-blue/trigger",O_RDWR);
- if(fd > 0)
- {
- write(fd,"none",4);
- printf("heartbeat stop\r\n");
- }
- int led = open("/sys/class/leds/led-blue/brightness",O_RDWR);
- int keys_fd;
- char ret[2];
- struct input_event t;
- keys_fd=open("/dev/input/event5", O_RDONLY);
- if(keys_fd <= 0)
- {
- printf("open /dev/input/event5 device error!\n");
- return -1;
- }
- while(1)
- {
- if(read(keys_fd, &t, sizeof(t)) == sizeof(t))
- {
- if(t.type==EV_KEY)
- if(t.value==0 )
- {
- write(led,"1",1);
- }else{
- write(led,"0",1);
- }
- }
- }
- close(keys_fd);
- return 0;
- }
复制代码 按下按键,LED就会亮起,松开按键则熄灭。这就是一个输入输出的简单应用。也就是基础操作需要掌握的。
|
|