# 环境安装
编译:
把人能看懂的代码编译成计算机能看懂的机器指令的过程
linux下面的gcc编译器
gcc xxx.c --->默认生成一个a.out的可执行文件
gcc xxx.c -o xxx ----> 生成一个名字叫xxx的可执行文件
共享文件夹:
可以共享的文件夹,两个操作系统可以共同使用的文件夹
虚拟机设置----》选项-----》共享文件夹----》总是启用-----》添加共享文件夹路径
/mnt/hgfs/共享文件夹名
linux的基础知识
1)终端
打开方式:Ctrl Alt t
终端是用户和linux核心沟通的桥梁
2)linux的文件系统
linux文件是以 树 组织
/为根目录
3)常用的命令
cd :change directory 改变目录 切换目录
cd 目录的绝对路径或者相对路径
ls :list 列举
ls -l
rm :remove 删除
删除一个普通文件
rm -rf 目录名
chmod +x 文件名
给文件可执行的权限
clear :清屏
./可执行文件:运行可执行文件
练习:
打印100以内的质数
mkdir 目录名
串口终端软件:SecureCRT
连接开发板步骤:
1)打开设备管理器 查看端口号(COM X)
2)打开SecureCRT 点击快速连接
协议:Serial
端口:你查到的端口号
波特率:115200
数据位:8
奇偶校验:None
停止位:1
流控:把所有的 狗 去掉
点击连接 出现绿色的对号 就表示连接成功
err = 0 回车
创建目录:mkdir lyw
# 交叉编译:
在一个环境下生成 适用于另一个环境的可执行程序的过程
linux下面用arm-linux-gcc 编译
arm-linux-gcc xxx.c -----> a.out
arm-linux-gcc xxx.c -o xxx -----> xxx(可执行文件)
把可执行文件传输到开发板上
通过串口下载 rx xxx 回车
传输 ---》 发送Xmodem -----》 找到可执行文件 -----》给文件可执行文件 ---》./可执行文件
# lcd屏幕
主要任务:在屏幕上显示一张纯色的图片
1、开发板的参数
芯片:三星S5P6818
处理器:ARM Cortex A53 64bits
OS:linux
lcd屏幕:800*480
2、lcd屏幕
分辨率:800*480
单位面积的像素点数
一行:800个像素点
一列:480
像素点:
显示某种颜色的点
颜色数据:
各种各样的颜色怎么组成?
三基色:R G B red green blue
如何来表示颜色程度? 红 很红 非常红 。。。 中国红
量化:数量化 用数值的大小来量化颜色的程度
每一种颜色占用一个字节(8bit)
红:0~255 0x00 ~ 0xff
lcd屏幕每个像素点占用4个字节 ----》a r g b
a:透明度
C语言中可以用int来保存我们的颜色数据
int color;
color = 0xff0000; //红色
color = 0x0000ff; //蓝色
3、帧缓冲设备
是底层专门用来操作屏幕的一个驱动 ,对应的lcd屏幕文件:/dev/fb0
把颜色数据写进我们的屏幕文件,就可以把屏幕的对应位置变成对应的颜色
//遍历二维数组,写我们的颜色数据
颜色数据已经准备好了,要想办法把color这个数据写入我们的linux内核屏幕文件中。
现在只需要操作文件即可
4、文件IO
IO :input/output
在linux下面操作文件需要几步?
打开文件:open()
对文件进行读写:read()/write()
关闭文件:close()
1)open()
NAME
open, openat, creat - open and possibly create a file
用来打开一个文件
SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
pathname:你要打开的那个文件的文件名 "/dev/fb0"
flags :打开的方式
只读:O_RDONLY
只写:O_WRONLY
读写:O_RDWR
返回值:int类型 文件描述符fd
失败返回-1
2)read()
NAME
read - read from a file descriptor
读取一个文件,从文件描述符
SYNOPSIS
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
fd:你要读取的文件的文件描述符
buf:地址,用来保存读取的数据
count:字节数,你要读取的字节数
返回值:返回成功读取的字节数
失败返回-1
3)write()
NAME
write - write to a file descriptor
写入一个文件描述符
SYNOPSIS
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
fd:你要写入的文件的文件描述符
buf:地址,用来保存你要写入的内容
count:字节数,写入的字节数
返回值:返回成功写入的字节数
失败返回-1
4)close()
NAME
close - close a file descriptor
关闭一个文件描述符
SYNOPSIS
#include <unistd.h>
int close(int fd);
fd:文件描述符
```c++
int main()
{
//打开文件,并设置权限,可读可写
int fd_lcd = open();
if( fd_lcd == -1)
{
//打印错误
}
//定义并赋值颜色数据
//把颜色数据写进文件中
write()
//关闭屏幕文件
}
```
代码举例: 显示俄罗斯国旗
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
//打开文件,并设置权限,可读可写
int fd_lcd = open("/dev/fb0",O_RDWR);
if( fd_lcd == -1)
{
perror("open fd_lcd failed");//打印错误
return -1;
}
int buf[800*480]; //定义并赋值颜色数据
int i,j,k;
for (i=0;i<480;i++)
{
for(j=0;j<800;j++)
{
if(i<160)
{
buf[k]=0xffffffff;
}
else if(i >= 160 && i < 320)
{
buf[k]=0xff5CACEE;
}
else
{
buf[k]=0xff0000;
}
k++;
}
}
//把颜色数据写进文件中
write(fd_lcd,buf,800*480*4);
//关闭屏幕文件
close(fd_lcd);
return 0;
}