# 环境安装
    编译:
        把人能看懂的代码编译成计算机能看懂的机器指令的过程

    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;
}
 

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信