01-基于粤嵌GEC6818实现屏幕的显示固定颜色进行自动切换
基于GEC6818实现屏幕颜色的切换
本文使用开发板GEC6818,实现屏幕显示特定颜色并且进行自动切换的功能。
文章目录
一、 初始化开发板–(开发板是新的则可以省略很多步骤)
拿到开发板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);//延迟1s
lseek(fd,0x00,SEEK_SET);
printf("green\n");
r2 = write(fd,color2,800*480*4);
if (r2!=800*480*4)
{
c
return -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函数在打印错误信息后会自动换行。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!