基于GEC6818实现屏幕颜色的切换
本文使用开发板GEC6818,实现屏幕显示特定颜色并且进行自动切换的功能。
文章目录
- 基于GEC6818实现屏幕颜色的切换
- 一、 初始化开发板--(开发板是新的则可以省略很多步骤)
- 1.1 **删除文件和文件夹**
- 1.2 **查看磁盘空间**
- 1.3 **编辑配置文件**
- 1.4 **创建文件夹**(选做)
- 1.5 **使用串口工具进行文件传输**
- 1.6 **更改文件权限**
- 二、 练习:实现循环切换颜色
- 2.1 解析
- 2.2 代码实现
一、 初始化开发板–(开发板是新的则可以省略很多步骤)
拿到开发板GEC6818时可能需要做(开发板不是新的)
1.1 删除文件和文件夹
rm *
: 删除当前目录下的所有文件。
1.2 查看磁盘空间
df -h
: 显示磁盘使用情况。-h
选项使输出以易读的格式显示。–查看该开发板的磁盘还有多少,如果很少了则需要再删除一些没有用的(前人的)文件夹
1.3 编辑配置文件
-
vi /etc/profile
: 使用vi
编辑器打开/etc/profile
文件。在这里,需要手动查找并注释掉特定的行。在vi
编辑器中,注释行通常是使用#
字符开头的行。 -
如果是别人使用过的开发板则看一看是否存在
#source /IOT/driver_ko/insmod_driver.sh#cd/ IOT #./iot & #前面打 # 表示注释
1.4 创建文件夹(选做)
mkdir -p /var/log
: 创建一个名为log
的文件夹。如果var
文件夹不存在,则先创建var
文件夹,然后再创建log
文件夹。–这个文件夹用来存放自己的文件当然这个也可以不做,看个人习惯
1.5 使用串口工具进行文件传输
rx 名字
: 这是一个命令行工具,用于从另一个设备(如计算机)接收文件。在接收文件之前,您需要在发送端启动xmodem
传输,然后使用CRT
或其他串口工具发送文件。回车就会有一个C在闪,CRT -> 传输 -> 发送xmodem
找到你要下载的文件双击/点击发送即可
等待传输完成
1.6 更改文件权限
chmod +x lcd
: 赋予lcd
文件可执行权限。这意味着您可以在此文件上运行它,前提是它是一个可执行文件。
二、 练习:实现循环切换颜色
在Linux系统上使用帧缓冲设备交替显示绿色和红色。每次颜色变化都会持续1秒,然后切换到另一种颜色,这样循环进行.
注意有函数:
延时 sleep(1)–>s级延迟
usleep(1)–>微秒级的延迟
当然可以。sleep
和 usleep
是两个用于在程序中引入延迟的函数。它们都用于暂停程序的执行,但它们的时间单位和实现方式有所不同。
-
sleep(1) - 秒级延迟:
- 原型:
unsigned int sleep(unsigned int seconds);
- 参数:
seconds
- 指定要暂停的秒数。 - 返回值:
sleep
函数返回时剩余的秒数。 - 实现:
sleep
函数会导致调用进程暂停执行,直到指定的秒数已过去或被捕获到信号。这是一个较为粗糙的延迟,因为它只能精确到秒。
- 原型:
-
usleep(1) - 微秒级延迟:
- 原型:
int usleep(useconds_t useconds);
- 参数:
useconds
- 指定要暂停的微秒数。 - 返回值:
usleep
函数没有返回值。 - 实现:
usleep
函数会导致调用进程暂停执行,直到指定的微秒数已过去或被捕获到信号。这允许更细粒度的时间控制,因为它可以精确到微秒。
- 原型:
注意:
- 虽然
usleep
在许多系统中仍然可用,但它在某些系统和版本中已被标记为弃用。建议使用nanosleep
函数,该函数提供了更高的时间精度,并且在不同的系统中具有更好的兼容性。
总之,这两个函数都提供了一种方式来暂停程序的执行,但它们的时间单位和精度有所不同。
2.1 解析
使用open()函数打开/dev/fb0设备文件,标志为O_RDWR,表示读写模式。
然后通过write()函数对这个设备进行写入
最后记得close()这个设备。
其中所使用的函数可以参考博客write函数与lseek函数详细解析、OPEN,READ,CLOSE以及实例分析
2.2 代码实现
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>int main()
{ int r1,r2;int fd =open("/dev/fb0",O_RDWR);if(-1 == fd){perror("open file error");close(fd);exit(1);}int color1[800*480];int color2[800*480];int i;for(i=0;i<800*480;i++){color1[i]=0x00FF00;color2[i]=0xFF0000;}while(1){r1 = write(fd,color1,800*480*4);if (r1!=800*480*4){perror("write error");return -2;}sleep(1);//延迟1slseek(fd,0x00,SEEK_SET);printf("green\n");r2 = write(fd,color2,800*480*4);if (r2!=800*480*4){creturn -2;}printf("red\n");lseek(fd,0x00,SEEK_SET);sleep(1);}close(fd);
}
上面代码中使用了perror()这个函数👇。
perror是C/C++语言中的一个函数,用于将最近的系统错误信息打印到标准错误输出流(stderr)。
它的使用方法如下:
-
包含头文件:#include <stdio.h>
-
声明函数原型:void perror(const char *s);
在需要打印错误信息的地方调用perror函数,并传入一个用于提示的字符串参数。例如:perror(“Error:”);
perror函数的作用是将errno变量中的错误号转化为可读的错误信息,并将其打印到标准错误输出流(stderr)中。传入的参数s将会作为一个前缀字符串输出。打印的格式一般为:“s: 错误信息”。
注意:
perror函数只能打印与最近的系统调用相关的错误信息。
如果系统调用成功,errno的值不会被改变,perror函数不会打印任何错误信息。
perror函数在打印错误信息后会自动换行。