一、项目介绍
利用集成开发板,编写代码实现温湿度数据采集显示,摄像头采集图像,按键控制led小灯。
二、软件介绍
VMware、Qt
三、基本内容讲解
vim编辑器:
三种模式:命令行模式 插入模式 底行模式
vim 文件名:vim test.c 文件不存在,新建该文件并打开,如果存在就直接打开
vim打开一个文件默认是命令行模式,该模式不能编辑文本
编辑文本必须在插入模式下
命令行模式-----》插入模式 按i o a
插入模式-----》命令行模式 按esc
命令行模式-----》底行模式 shift+:
保存文本都是在底行模式下
:w 保存
:q 退出
:wq 保存并退出
:wq! 强制保存并退出
nyy : 复制n行
p : 粘贴
u : 撤销
鼠标选中要开始复制的位置,在命令行模式下按nyy,鼠标再次选择你要粘贴的位置,然后按p就会从下一行开始粘贴
gedit便捷器:
gedit 文件名
编译:
gcc test.c //默认生成的可执行文件名叫a.out
运行: ./a.out
gcc test.c -o test //生成的可执行文件名叫test
运行: ./test
四、Linux系统相关知识讲解
常见命令:
打开终端:ctrl+alt+t
放大:ctrl+shift+’+’
ls : 查看目录下的内容
ls -l : 查看目录下内容的详细属性
Linux下面一切皆文件,一共有七种类型的文件
d ----->文件夹 目录
- ----->普通文件
c ------>字符设备文件
b ------->块设备文件
p ------->管道文件
l ------->链接文件
s ------->套接字文件
ls -a :查看目录下的所有内容(包含了隐藏文件 以.开头的文件)
用户的工作目录(家目录): /home/用户名
cd : 切换路径
相对路径:具体看参照路径
绝对路径:从根目录开始的路径
cd 目录:切换到该目录
cd … : 返回上一级
cd - : 快速返回上一次所在目录
cd (cd ~):快速返回家目录
cd . : 当前目录
cp 要复制的文件 目标路径
cp -r 要复制的文件夹 目标路径
mv 要移动的文件(夹) 目标路径
mv aa bb:bb如果存在,那么就是将aa移动到bb 如果不存在,就是将aa改名为bb
touch :新建普通文件
mkdir :新建文件夹
rm : 删除普通文件
rm -rf:删除文件夹
清屏:clear(ctrl+l)
sudo :增加权限
向上的箭头:查看历史命令
Tab键:自动补全
五、C语言知识相关讲解
文件IO :Linux操作系统提供的一系列对文件进行操作的接口函数
文件描述符:文件的唯一标识,一般是一个整型数
0-----》标准输入
1-----》标准输出
2-----》标准错误
文件操作:
(1)打开文件 open
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char * pathname, int flags); //打开一个已经存在的文件
参数1:打开的文件的路径 字符串常量
参数2:打开文件的方式
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 可读可写
返回值:如果文件打开成功会返回文件描述符,打开失败会返回-1
int fd = open("./test.c",O_RDONLY);
if(fd < 0)
{
printf("open test.c failed!\n");
}
printf("open ok!fd = %d\n",fd);
int open(const char *pathname, int flags, mode_t mode); //打开的是一个不存在的文件(新建的文件)
参数1:打开的文件的路径 字符串常量
参数2:打开文件的方式 O_CREAT | O_RDWR
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 可读可写
参数3:新建文件的权限 一般用八进制的方式表示
返回值:如果文件打开成功会返回文件描述符,打开失败会返回-1
int fd = open("./test1.c",O_CREAT | O_RDWR,0666);
if(fd < 0)
{
perror("open");
}
printf("fd = %d\n",fd);
(2)关闭文件 close
#include <unistd.h>
int close(int fd);
参数:文件描述符
close(fd);
close(fd1);
(3)读取文件内容 read
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count); //从fd这个文件里面读取count个字节的内容到buf里面
参数1:要读取内容的文件的描述符
参数2:数据缓存区 (通常是数组)
参数3:读取内容的大小
返回值:如果返回值大于0,返回的就是实际读取到的字节数;返回值等于0,说明已经读到了文件末尾;返回值小于0,说明读取失败。
char buf[100] = {0};
int ret = read(fd,buf,sizeof(buf));
if(ret < 0)
{
perror("read");
}
printf("buf : %s\n",buf);
(4)写入文件 write
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count); //向fd这个文件里面写入buf的count个字节的内容
参数1:要写入内容的文件的描述符
参数2:数据缓存区
参数3:写入内容的大小
返回值:返回值大于0,返回实际写入的字节数 返回值小于0,写入失败
int ret1 = write(fd1,buf,ret);
(7)完全复制一个文件的内容到另外一个文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
int fd = open("./test.c",O_RDONLY);
if(fd < 0)
{
perror("open");
return -1;
}
printf("open ok!fd = %d\n",fd);
int fd1 = open("./day1-1/test1.c",O_CREAT | O_RDWR, 0666);
if(fd1 < 0 )
{
perror("open");
return -1;
}
printf("fd1 = %d\n",fd1);
while(fd1==0){
char buf[1000] = {0};
int ret = read(fd,buf,sizeof(buf));
if(ret < 0)
{
perror("read");
}
printf("buf : %s\n",buf);
int ret1 = write(fd1,buf,ret);
if(ret1 < 0)
{
perror("write");
}
}
printf("write ok!\n");
close(fd);
close(fd1);
return 0;
}