1.gpio口如何向用户传数据
内核向应用层传数据是通过copy_to_user实现的,首先把拿到的数据都赋值给一个结构体,这个结构体包含湿度数据,温度数据。拿到以后可以通过通过linux内核的函数copy_to_user讲结构体的地址传进去,之后用户通过系统调用read读取/dev/dht11这个节点就可以读到相关的数据了。
2.在这个项目中,开发板和dht11用的是哪个通信协议呢
用到是单总线的通信协议,通过一根sda进行通信,既可以产生脉冲,又可以传输数据,并且数据的传输是双向的。
3.怎么样在linux下引用外部库
在samples的makefile定义3个变量分别是DIR_INC,DIR_BIN,DIR_LIB
DIR_INC,DIR_BIN,DIR_LIB分别表示你的头文件所在的目录,可执行文件所在的目录,还有依赖库所在的目录。
TARGET 表示你可执行文件的名称
并且makefile里面有LDFLAGS,LIBS这些选项,这些选项分别告诉链接器要在哪里链接动态库
LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib
LDFLAGS += -lmsc -lrt -ldl -lpthread -lstdc++ //-lmsc这个库是讯飞语音的sdk的依赖库
把各个.c文件编译汇编成.o并链接起来成最终的可执行文件。
4.Makefile 介绍
首先,我们用一个示例来说明Makefile的书写规则。以便给大家一个感兴认识。我们的规则是:
1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。
只要我们的Makefile写得够好,所有的这一切,我们只用一个make命令就可以完成,make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。
5.说一下linux下网络编程的有关函数
首先有关的头文件
<sys/socket.h>
<netinet/in.h>
socked(AF_INT,SOCK_STREAM,TCP);
bind(int socked_fd,&addr,strlen(addr));//这个addr指的是要绑定给socket的套接字地址,一般这个结构体设置了你要监听的端口号,ip地址所属于的协议栈 ipv4 ,如果用的是inaddr_any这个宏,表面套接字绑定整个网络,
listen(fd,back_log);监听套接字,客户端最大连接数。
之后accpet(fd,),进入堵塞状态,等待客户端来接接。
6.open和fopen的区别。(未完待续)
fopen是标准c库函数,open是系统调用。
fopen返回的是一个标识符,open返回的是一个文件句柄
fopen是文件缓冲系统,open是非文件缓冲系统。
fopen会在用户态开辟一个用户缓冲区,之后使用read和write的时候就会切换切换到内核态的次数。
fopen可以移植,而open不可以。