TA的每日心情 | 难过 2017-4-18 09:57 |
---|
签到天数: 7 天 连续签到: 1 天 [LV.3]偶尔看看II
|
系列阅读:https://jingyan.eeboard.com/category/53
前面一篇是用python熟悉了BBB的部分软件环境,但是毕竟C语言将成为试用之旅的主力,本篇重点用C实现对BBB小灯的控制。
当然首先得先试试SHELL命令,这也是熟悉BBB的必经之路。
仍旧选择P8_12管脚作为输出,找到手册上的Table 8 中P8管脚的说明。P8_12是GPIO1_12 ,计算对应Linux中的GPIO号为44(32 *1 +12)
1. 首先进入 /sys/class/gpio目录
默认情况下没有看到GPIO44的信息,使用echo命令产生GPIO44目录
2 cd GPIO44 ,进入该目录,设置Direction为输出模式(OUT),设置输出电平value(1或0)
在SHELL使用ECHO就能on/ off led灯,实际是对direction 和value文件写入相应的值就可以了,用C语言控制led灯也是这个思路,只不过调用库函数实现对指定文件的读写。
适当改动了一下
#include <string.h>
#include <fcntl.h>
#define SYSFS_GPIO_DIR "/sys/class/gpio"
#define MAX_BUF 32
void main()
{
char buf[MAX_BUF];
char buf2[MAX_BUF];
char ch;
int i;
//export gpio44
fd = open(SYSFS_GPIO_DIR "/export", O_WRONLY);
strncpy(buf,"44",strlen("44"));
write(fd,buf,strlen("44"));
close(fd);
memcpy(buf,SYSFS_GPIO_DIR"/gpio44/direction",strlen(SYSFS_GPIO_DIR"/gpio44/di rection"));
fd = open(buf, O_WRONLY);
write(fd, "out", 4); //设置GPIO44 为输出
close(fd);
snprintf(buf,sizeof(buf),SYSFS_GPIO_DIR"/gpio44/value");
fd = open(buf, O_RDWR);
for(i=0;i<2;i++)
{
write(fd, "0", 1);
usleep(1000000);
write(fd, "1", 1);
usleep(1000000);
}
close(fd); //on off 若干次 ,1s闪烁一次现象
fd= open(buf,O_RDWR);
read(fd,&buf2,sizeof(buf2));
printf("the last value: %s\n",buf2);
close(fd); //读出当前文件gpio44/value 中的值
}
整个过程很顺利,操作也很简单,证明当前BBB的环境都很正常,下一步可以研究下其他有意思的了。
顺便再提个问题,用date 看了下系统时间,差的十万八千里。我参考了部分网友的分享,试了试出现以下报错,是否缺少一些组件,还是时间同步服务器端的问题呢?请大侠明示?谢谢喔
|
|